ASP 프로그래밍에서는 신원 인증이 일반적으로 사용된다고 할 수 있습니다. 하지만 인증 보안을 어떻게 달성할 수 있을까요?
양식 제출 페이지: sub.htm
<html>
<머리>
<title>관리자 로그인</title>
<본문>
<양식 이름=form1 방법=포스트 작업=sub.asp>
<p>관리자:
<입력 유형=텍스트 이름=사용자 ID 크기=25 최대 길이=20>
비밀번호:
<입력 유형=텍스트 이름=패스 크기=12 최대 길이=20>
<입력 유형=제출 이름=제출 값=제출>
</p>
</form>
</body>
</html>
SUB.asp 프로그램
<%
양식에서 데이터 수신
user=request.from(사용자ID)
양식을 통해 제출된 데이터가 비어 있는지 확인하세요(JAVASCRIPT 또는 VBSCRIPT를 사용하여 양식 페이지를 제어할 수 있지만 여기에서 제어하는 것을 잊지 마세요!)
사용자=이면
오류 메시지 페이지로 이동하세요!
응답.리디렉션 err1.htm
이 문장은 유용하지 않을 수도 있지만 추가해 두시면 좋아요!
응답.끝
종료하면
pass=request.from(통과)
통과=이면
응답.리디렉션 err2.htm
응답.끝
종료하면
데이터베이스에 가입
file=server.mappath(데이터베이스)
conn=server.createobject(adodb.connection) 설정
dr=driver={Microsoft 액세스 드라이버(*.mdb)};dbq=&file
conn.open 박사
rs=server.createobject(adodb.recordset) 설정
여기서 핵심은 SQL 언어입니다.
sql=select * user= &user& 및 pass= &pass&인 테이블에서 선택
RS.오픈SQL
rs.eof가 아니라면
찾으셨다면 관리페이지로 이동해주세요.
응답.리디렉션 로그인.asp
또 다른
찾을 수 없으면 오류 페이지로 들어갑니다.
응답.쓰기 err3.htm
종료하면
%>
모두가 위 코드가 괜찮을 것이라고 생각하지만 여기에는 심각한 보안 위험이 있습니다.
관리자로 로그인하려면 SUb.htm 양식 입력 상자에 다음을 입력하면 됩니다.
첫 번째 텍스트 상자에 a 또는 1 = 1 또는 OR =를 입력합니다.
두 번째 텍스트 상자에 a 또는 1 = 1 또는 OR =를 입력합니다.
제출하면 모두가 알 수 있습니다... 아, 내 말을 들어보세요. 알겠습니다. 벽돌은 나중에 던지겠습니다...
a와 1은 임의의 문자입니다.
어떤 분들은 관리자로 들어가는데 왜 이런 문자를 입력하느냐고 물으실 수도 있습니다. ?
실제로 이러한 문자는 프로그램에서 SQL 언어를 속이고 성공적으로 입력하는 데 사용됩니다.
보시다시피 시작 프로그램 SQL에서 테이블은 user= &user& 및 pass= &pass& 조건을 만족하는 레코드에 대해 쿼리됩니다.
sql=select * user= &user& 및 pass= &pass&인 테이블에서 선택
위의 코드를 입력한 후 다음과 같이 되었습니다.
sql=select * user= a 또는 1 = 1이고 pass= a 또는 1 = 1인 테이블에서 선택
들어가지 않을 이유가 있나요? ? 먼저 들어가지 말아야 할 이유를 대라!
위의 USER PASS 필드는 문자형이고 숫자형인 경우에도 마찬가지입니다!
해결책:
1. 기능 대체 방법:
제어 목적을 달성하기 위해 사용자가 입력한 내용에 포함된 특수 문자를 대체하려면 REPLACE를 사용하세요! sql=select * user= &replace(user, , )& 및 pass= &replace(pass, , )&인 테이블에서 선택
이 방법은 한 번에 한 문자만 바꿀 수 있다. 실제로 위험한 문자뿐만 아니라 >, <, &, % 등과 같은 문자도 제어해야 한다. 그런데 REPLACE 기능을 사용할 수 없을 것 같으면 어떻게 해야 하나요? ?
2. 프로그램 제어 방법
프로그램을 사용하여 클라이언트가 입력한 모든 내용을 제어함으로써 사용자가 입력한 위험한 문자나 코드를 완전히 제어할 수 있습니다.
<%
사용자가 제출한 양식 콘텐츠 캡처
user=request.from(사용자)
패스=request.from(패스)
...
루프 제어 시작
i=1에서 len(사용자)까지
MID 함수를 사용하여 user 변수의 i 위치에 있는 문자를 읽습니다.
us=mid(사용자,i,1)
읽은 문자 비교
us= 또는 us=% 또는 us=< 또는 us=> 또는 us=&인 경우
위의 문자가 포함되어 있으면 오류 메시지가 나타납니다. 위의 특수 문자를 포함할 수 없습니다.
응답.리디렉션 err2.htm
응답.끝
종료하면
다음
...
%>