권장 : ASP로 실제 IP 주소를 찾는 방법 우리 모두 알다시피, IP 주소를 얻는 방법은 다음과 같은 참조 된 내용입니다. <%= request.servervaribles (remote_addr)%>
1. 공격 원리
쿠키 스푸핑은 주로 현재 네트워크에 쿠키에 사용자 로그인 정보를 저장하는 안전하지 않은 관행을 사용합니다.
일반 쿠키 기반 사용자 시스템은 쿠키에 최소한 두 가지 변수를 저장한다는 것을 알고 있습니다. 사용자 이름과 사용자 레벨은 사용자 이름이 사용자 이름이고 사용자 레벨은 사용자 수준입니다. 브라우저가 ASP 페이지에 액세스하면 다음과 같은 것을 방출합니다.
| 다음은 인용 된 내용입니다. get /.../file.asp http 1.0 ... 쿠키 : username = user & userlevel = 1 ... 그런 다음 관리자의 사용자 이름 및 사용자 레벨 값 (각각 관리자 및 5를 가정)을 아는 한 전송할 수 있습니다. get /.../file.asp http 1.0 ... 쿠키 : username = admin & userlevel = 5 ... |
관리자 권한을 얻습니다. 아주 간단합니까? 그러나 취약성이 발견되기 전에 거의 모든 사용자 관리 시스템이 쿠키에 의존했습니다.
2. 사용자 정보를 안전하게 저장합니다
쿠키는 불안하고 사용자 로그인 정보를 저장해야하므로 어디에 저장해야합니까?
ASP에는 쿠키 외에도 정보를 저장할 수있는 세션도 있음을 알았습니다. 세션은 서버에 저장되며 클라이언트가 마음대로 변경할 수 없으므로 보안이 매우 높습니다. 이런 식으로 모든 사람은 모든 쿠키의 코드를 세션으로 변경할 수 있습니다.
3. 사용자 정보를 오랫동안 저장하십시오
세션은 사용자 로그인 정보를 저장하는 데 사용됩니다. 쿠키 스푸핑 문제를 제거하지만 세션은 오랫동안 저장 될 수 없습니다 (IIS 기본 세션은 20 분 동안 응답을 중지 한 후에 만료됩니다). 이 섹션에 설명 된 것이 생성됩니다.
이 방법의 두 가지 변형은 사용자 이름과 비밀번호를 쿠키에 저장하는 것입니다 쿠키의 내용이 합법적인지 여부를 확인하기 위해 쿠키에 따라 제공합니다. 이 방법을 구현하려는 코드는 다음과 같습니다.
| 다음은 인용 된 내용입니다. VBS : <% DIM 사용자 이름, 비밀번호 사용자 이름 = 세션 (사용자 이름) username =이면 '세션에 사용자 로그인 정보가 없습니다. username = request.cookies (사용자 이름) 암호 = request.cookies (비밀번호) 'SQL 주입 취약점 (즉, 단일 따옴표 필터링)을 방지하기 위해 위의 두 문장에서 얻은 사용자 이름과 비밀번호에주의를 기울이십시오. Username = 또는 password = 인 경우 '사용자가 로그인되지 않았습니다 ... 또 다른 '여기서는 Conn과 RS 객체가 생성되었다고 가정합니다. Rs. OPEN [사용자]에서 상위 1 *를 선택하십시오. 그렇다면 rs.eof '쿠키의 정보는 불법입니다 ... 또 다른 '쿠키의 정보는 합법적이며 자동으로 로그인됩니다. 세션 (사용자 이름) = 사용자 이름 ... 끝 If 끝 If 또 다른 '사용자 정보는 이미 세션에 존재하며 직접 읽습니다. ... 끝 If %> JS : <% var 사용자 이름, 비밀번호; 사용자 이름 = 세션 (사용자 이름); if (username == || username == undefined) { // 세션에는 사용자 정보가 없습니다 username = request.cookies (사용자 이름); password = request.cookies (비밀번호); // 위의 두 문장에서 얻은 사용자 이름과 비밀번호에주의를 기울여 SQL 주입 취약성 (예 : 단일 따옴표 필터링)을 방지합니다. if (username == || username == undefined || password == || password == undefined) { // 사용자가 로그인되지 않았습니다 ... } 또 다른 { // 여기에서 Conn과 RS 객체가 생성되었다고 가정합니다. rs.open (username = 'username'및 password = 'password', conn, 1, 3)에서 [user]에서 상위 1 *를 선택하십시오. if (rs.eof) { // 쿠키의 정보는 불법입니다 ... } 또 다른 { // 쿠키의 정보는 합법적이고 자동으로 로그인됩니다. 세션 (사용자 이름) = 사용자 이름; ... } } } 또 다른 { // 사용자 정보는 세션에 이미 존재하며 직접 읽습니다. ... } %> |
그러나이 방법은 사용자에게는 안전하지 않습니다. 브라우저는 페이지를 방문 할 때마다 쿠키를 전송하고 암호가 포함 된 쿠키가 다른 사람이 얻으면 사용자의 계정이 도난 당하기 때문입니다. 이 경우, 두 번째 방법이 나타납니다. 즉, 사용자 정보 데이터베이스에 필드 검증 코드를 추가하면 긴 정수 검증 값이 확인 코드 필드에 무작위로 생성되어 저장됩니다. 암호 입금 쿠키 대신 코드 값이 추가됩니다. 쿠키에서 사용자 정보를 확인할 때 사용자 이름과 VerifyCode 만 확인됩니다. 이 방법의 장점은 사용자의 쿠키를 해커에 의해 얻어도이 임시 검증 코드 만 사용하여 로그인 할 수 있으며 사용자의 암호를 얻을 수 없다는 것입니다. 이 사용자가 사용자 이름과 비밀번호로 다시 로그인하는 한 VerificationCode 값이 변경되고 해커는 원래 VerificationCode를 통해 로그인 할 수 없습니다.
이 방법의 구현은 위에서 언급 한 방법 코드를 약간 변경하면됩니다. 먼저 로그인 프로그램에서 확인이 사용자 정보를 저장하기 위해 통과하는 단락을 추가해야합니다.
| 다음은 인용 된 내용입니다. VBS : <% 응답 .cookies (VerifyCode) = int (RND * 2100000000) %> JS : <% 응답 .cookies (verifyCode) = math.floor (math.random () * 2100000000); %> |
그런 다음 위에 제공된 확인 코드에서 쿠키 검증 (비밀번호)을 쿠키 확인 (verifycode)으로 변경하십시오.
4. 결론
분석 및 처리를 통해 쿠키 스푸핑 취약점이 완전히 해결되었으며 그 이후로 ASP 프로그램이 더욱 안전 해졌습니다.
공유 : ASP 웹 페이지의 개발 프로세스에서 몇 가지 팁 ASP는 Universal Gateway 인터페이스를 대체하기 위해 Microsoft가 시작한 기술입니다. 웹 서버 측 실행 환경입니다. ASP 자체에는 vbscript 및 JavaScript 엔진이 포함되어있어 스크립트를 HTML에 직접 내장 할 수 있습니다.