권장 : DHTML XML ASP CSS의 트리 디렉토리에 대해 이야기 트리 디렉토리는 프로그램 문제 설명 : 자체 관련 데이터 테이블이 종종 프로젝트에 나타납니다. 전체 관점에서 볼 때 전체 테이블이 트리 데이터 구조로 표시됩니다 (복잡한 경우에는 그래프가 될 수 있음). 우리 가이 테이블을 할 때
ASP 프로그래밍에서는 신원 인증이 자주 사용된다고 말할 수 있습니다. 그러나 어떻게 인증 보안을 달성 할 수 있습니까?
양식 제출 페이지 : sub.htm
| 다음은 인용 된 내용입니다. <html> <헤드> <title> 관리자 로그인 </title> <body> <form name = form1 메서드 = post action = sub.asp> <p> 관리자 : <입력 유형 = 텍스트 이름 = userId size = 25 maxlength = 20> 비밀번호: <입력 유형 = 텍스트 이름 = 패스 크기 = 12 maxlength = 20> <입력 유형 = 제출 이름 = 제출 값 = 제출> </p> </form> </body> </html> |
| 다음은 인용 된 내용입니다. sub.asp 프로그램 <% 양식에서 데이터를받습니다 user = request.from (userId) 양식에 제출 된 데이터가 비어 있는지 확인하십시오 (양식 페이지는 JavaScript 또는 VBScript에 의해 제어 될 수 있지만 여기에서 제어하는 것을 잊지 마십시오! user = 인 경우 오류 프롬프트 페이지로 이동하십시오! Response.redirect err1.htm 이 문장은 쓸모가 없지만 추가하는 것이 좋습니다! 응답. 엔드 끝 If Pass = request.from (Pass) Pass =이면 Response.redirect err2.htm 응답. 엔드 끝 If 데이터베이스에 가입하십시오 file = server.mappath (데이터베이스) set conn = server.createobject (adodb.connection) dr = driver = {Microsoft Access Driver (*.mdb)}; dbq = & file CONN.OPEN DR set rs = server.createobject (adodb.recordset) 열쇠는 여기 SQL 언어입니다 sql = select * where user = & user & and pass = & pass & Rs. OPEN SQL 그렇지 않다면 그렇다면 발견되면 관리 페이지로 이동하십시오 REPONSE.ROGIN.ASP 또 다른 찾을 수없는 경우 오류 페이지를 입력하십시오 응답. err3.htm 끝 If %> |
모든 사람은 위의 코드가 괜찮을 것이라고 생각하지만 여기에 심각한 보안 위험이 있습니다.
관리자에게 로그인하려면 sub.htm 양식 입력 상자에 입력 할 수 있습니다.
첫 번째 텍스트 상자에 입력하십시오 : A 또는 1 = 1 또는 OR =
두 번째 텍스트 상자에 입력하십시오 : A 또는 1 = 1 또는 또는 =
제출, 당신은 볼 것입니다 ... 우, 내 말을 들어라, 끝나는 것이 좋습니까? 벽돌이 다시 던져 질 것입니다 ...
A와 1은 모든 문자입니다
누군가 왜이 캐릭터를 관리자로 입력하는지 물어볼 수 있습니까? ?
실제로이 캐릭터는 프로그램의 SQL 언어에 대한 속임수이며 성공적으로 입력했습니다.
모든 사람이 볼 수 있습니다 : 프로그램 시작 SQL은 테이블을 쿼리하고 user = & user & and pass = & pass & 조건을 충족시키는 레코드입니다.
sql = select * where user = & user & and pass = & pass &
위의 코드를 입력했는데 다음이되었습니다.
sql = select *에서 user = a 또는 1 = 1이고 pass = a 또는 1 = 1 테이블에서 선택
참석하지 말아야 할 이유가 있습니까? ? 먼저 들어 가지 말아야 할 이유를주세요!
위의 사용자 패스 필드는 문자 유형이며 숫자 유형 인 경우 마찬가지입니다!
해결책:
1. 기능 대체 방법 :
교체를 사용하여 사용자의 컨텐츠 입력을 특수 문자로 교체하여 제어 목적을 달성하십시오! sql = select *에서 user = & replace (user,,) & pass = & replace (pass ,,) &
이 방법은 한 번에 하나의 문자 만 대체 할 수 있습니다. 실제로, 위험한 캐릭터는 단지>, <, &, %와 같은 문자도 완전히 제어해야합니다. 그러나 교체 함수에 유능하지 않은 것 같으면 어떻게해야합니까? ?
2. 프로그램 제어 방법
프로그램을 사용하여 클라이언트가 입력 한 모든 컨텐츠를 제어하여 클라이언트가 입력 한 위험한 캐릭터 또는 코드를 완전히 제어 할 수 있도록하십시오. 나는이 방법을 할 것이다!
| 다음은 인용 된 내용입니다. <% 사용자가 제출 한 양식 컨텐츠를 캡처하십시오 user = request.from (사용자) Pass = request.from (Pass) ... 사이클 제어가 시작됩니다 i = 1 to len (사용자)의 경우 MID 함수를 사용하여 변수 사용자의 I 위치에서 문자를 읽으십시오. us = mid (사용자, i, 1) 읽기 문자 비교 US = 또는 US =% 또는 US = <또는 US => 또는 US = & 그런 다음 위의 문자가 포함되면 오류 메시지가 발생합니다. 위의 특수 문자는 포함 할 수 없습니다. Response.redirect err2.htm 응답. 엔드 끝 If 다음 ... %> |
공유 : ASP 및 저장 절차를 구문 분석합니다 ASP 및 저장 절차에 대한 기사가 많이 있지만 저자가 실제로 연습했다고 의심합니다. 처음에 있었을 때 많은 관련 정보를 읽었으며 제공된 많은 방법이 실제로는 그렇지 않다는 것을 알았습니다. 간단한 응용 프로그램의 경우 이는입니다