ASP를 사용하여 웹 페이지를 개발할 때 명심해야 할 사항 ASP를 사용하는 친구는 단계를 살펴볼 수 있습니다.
1. 사용자 입력이 적절한 크기이거나 적절한 문자를 포함하고 있다고 절대 신뢰하지 마십시오. 사용자 입력을 사용하여 결정을 내리기 전에 항상 유효성을 검사해야 합니다. 가장 좋은 방법은 ASP 페이지에서 호출하여 사용자 입력의 유효성을 검사할 수 있는 COM+ 구성 요소를 만드는 것입니다. Server.HTMLEncode 메서드, Server.URLEncode 메서드 또는 이 페이지 하단에 있는 코드 샘플 중 하나를 사용할 수도 있습니다.
2. 사용자가 입력한 문자열을 연결하여 ASP 페이지에 데이터베이스 연결 문자열을 생성하지 마십시오. 악의적인 사용자는 입력 내용에 코드를 삽입하여 데이터베이스에 액세스할 수 있습니다. SQL 데이터베이스를 사용하는 경우 저장 프로시저를 사용하여 데이터베이스 연결 문자열을 만듭니다.
3. 기본 SQL 관리자 계정 이름 sa를 사용하지 마십시오. SQL을 사용하는 모든 사람은 sa 계정이 존재한다는 것을 알고 있습니다. 안전한 비밀번호로 다른 SQL 관리 계정을 생성하고 sa 계정을 삭제하세요.
4. 클라이언트 사용자 비밀번호를 저장하기 전에 해시 알고리즘, base64 인코딩을 사용하거나 Server.HTMLEncode 또는 Server.URLEncode를 사용하여 이러한 비밀번호를 인코딩하십시오. 또한 이 페이지 하단에 있는 코드 샘플 중 하나를 사용하여 클라이언트 암호의 문자를 확인할 수도 있습니다.
5. 관리 스크립트나 ASP 페이지에 관리 계정 이름이나 암호를 넣지 마십시오.
6. 헤더 데이터는 악의적인 사용자에 의해 위조될 수 있으므로 요청 헤더를 기반으로 코드에서 결정을 내리지 마십시오. 요청 데이터를 사용하기 전에 항상 인코딩하거나 아래 코드 예제를 사용하여 포함된 문자를 확인하세요.
7. 쿠키에 보안 데이터를 저장하거나 웹페이지의 입력 필드를 숨기지 마십시오.
세션 쿠키를 암호화하지 않고 보내는 위험을 방지하려면 항상 세션 기반 애플리케이션에 SSL(Secure Sockets Layer)을 사용하십시오. 세션 쿠키가 암호화되지 않은 경우 악의적인 사용자는 한 응용 프로그램의 세션 쿠키를 사용하여 동일한 프로세스의 다른 응용 프로그램에 액세스할 수 있습니다.
8. ISAPI 응용 프로그램, 필터 또는 COM+ 개체를 작성할 때 변수 및 데이터 크기로 인한 버퍼 오버플로에 유의하십시오. 또한 절대 경로 이름을 상대 경로 이름이나 URL로 해석하는 등 해석으로 인해 발생할 수 있는 정규화 문제에 유의하세요.
9. STA(단일 스레드 아파트)에서 실행되는 ASP 응용 프로그램이 MTA(다중 스레드 아파트)로 전환되면 가장 토큰이 더 이상 사용되지 않게 됩니다. 이로 인해 응용 프로그램이 가장 없이 실행되어 다른 리소스에 대한 액세스를 허용할 수 있는 프로세스의 ID로 효과적으로 실행될 수 있습니다. 스레딩 모델을 전환해야 하는 경우 변경하기 전에 응용 프로그램을 비활성화하고 제거하십시오.
코드 예
이 코드 예제에는 함수로 전송된 문자열에서 잠재적으로 유해한 문자를 제거하는 함수가 포함되어 있습니다. 위의 두 예 모두에서 올바른 인코딩을 보장하기 위해 코드 페이지를 지정합니다. 다음 예에서는 Microsoft Visual Basic® Scripting Edition(VBScript)을 사용합니다.
<%@ LANGUAGE=VBScript %> <% 응답.코드페이지 = 1252 Response.Write(Hello, & RemoveBadCharacters(Request.Form(사용자 이름))) Response.Write(<BR>이것이 오류를 받은 이유입니다:) 함수 RemoveBadCharacters(strTemp) 희미한 정규식 regEx = 새 RegExp 설정 regEx.Pattern = [^/s/w] regEx.Global = 참 RemoveBadCharacters = regEx.Replace(strTemp, ) 기능 종료 %> |
다음 예에서는 Microsoft JScript®를 사용합니다.
<%@ LANGUAGE=JScript %> <% 응답.코드페이지 = 1252; Response.Write(Hello, + RemoveBadCharacters(Request.Form(UserName))); Response.Write(<BR>이것이 오류를 받은 이유입니다:); 함수 RemoveBadCharacters(strTemp) { strTemp = strTemp.replace(/[^/s/w]/g,); strTemp를 반환합니다; } %> |