ASP 프로그래밍에서는 신원 인증이 일반적으로 사용된다고 할 수 있습니다. 하지만 인증 보안을 어떻게 달성할 수 있을까요?
양식 제출 페이지: sub.htm
<html>
<머리>
<title>관리자 로그인</title>
<본문>
<form name="form1" method="post" action="sub.asp">
<p>관리자:
<input type="text" name="UserID" size="25" maxlength="20">
비밀번호:
<input type="text" name="Pass" size="12" maxlength="20">
<input type="submit" name="제출" value="제출">
</p>
</form>
</body>
</html>
SUB.asp 프로그램
<%
양식에서 데이터 수신
user=request.from("사용자ID")
양식을 통해 제출된 데이터가 비어 있는지 확인하세요(JAVASCRIPT 또는 VBSCRIPT를 사용하여 양식 페이지를 제어할 수 있지만 여기에서 제어하는 것을 잊지 마세요!)
user=""인 경우
오류 메시지 페이지로 이동하세요!
response.redirect "err1.htm"
이 문장은 유용하지 않을 수도 있지만 추가해 두시면 좋아요!
응답.끝
종료하면
pass=request.from("통과")
pass=""이면
response.redirect "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.open SQL
rs.eof가 아니라면
찾으셨다면 관리페이지로 이동해주세요.
response.redirect "login.asp"
또 다른
찾을 수 없으면 오류 페이지로 들어갑니다.
response.write "err3.htm"
종료하면
%>
위의 코드는 괜찮을 것이라고 누구나 생각하지만 여기에는 심각한 보안 위험이 있습니다.
관리자로 로그인하려면 SUb.htm 양식 입력 상자에 입력하면 됩니다.
첫 번째 텍스트 상자에 입력합니다. 또는 1 = 1 또는 OR =
두 번째 텍스트 상자에 입력: a 또는 1 = 1 또는 OR =
제출하면 모두가 볼 수 있습니다... "아, 내 말 들어봐, 알았어, 나중에 벽돌을 던질게..."
"a"와 "1"은 임의의 문자입니다.
이러한 문자를 입력하면 왜 관리자로 입력하느냐고 묻는 분들이 있을 것입니다. ?
실제로 이러한 문자는 프로그램의 SQL 언어에 대한 속임수입니다. 성공적으로 입력한 경우
다음을 참조하십시오. SQL 프로그램을 시작할 때 사용자= "&user&" 및 통과= "를 충족하는 레코드에 대해 테이블이 쿼리됩니다. &pass&" "conditions
sql="select * from table where user= "&user&" and pass= "&pass&" "
위 코드를 입력한 후 결과는 다음과 같습니다:
sql="select * from table where user= a 또는 1 = 1 and pass= a or 1 = 1 "
어디보자, 들어가지 말아야 할 이유가 있나요? ? 들어가지 말아야 할 이유를 대주세요!
위의 USER PASS 필드가 숫자인 경우에도 마찬가지입니다!
해결 방법:
1.
REPLACE를 사용합니다. 특수 문자를 바꿉니다. 제어 목적을 달성하기 위해 사용자가 입력한 콘텐츠에서 sql="select * from table where user= "&replace(user," "," ")&" and 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="&"인 경우
위의 문자가 포함되어 있으면 오류 메시지가 나타납니다. 위의 특수 문자를 포함할 수 없습니다.
response.redirect "err2.htm"
응답.끝
종료하면
다음
...
%>