SQL 주입 공격은 설계 취약점을 악용하여 대상 서버에서 SQL 명령을 실행하고 사용자가 입력한 데이터를 확인하지 않고 SQL 명령을 동적으로 생성하는 다른 공격을 수행하는 것을 말합니다. 이것이 SQL 주입 공격이 성공하는 주요 이유입니다.
예를 들어:
쿼리 문이 선택 * admin인 경우 사용자 이름=''"&user&"'' 및 비밀번호=''"&pwd&"''"
따라서 내 사용자 이름이 1'' 또는 ''1''=''1인 경우
그러면 쿼리 문은 다음과 같습니다.
사용자 이름=''1 또는 ''1''=''1'' 및 비밀번호=''"&pwd&"''"인 관리자에서 *를 선택하세요.
이런 방식으로 쿼리 문이 통과되고 관리 인터페이스에 들어갈 수 있습니다.
따라서 예방 조치 시 사용자 입력을 확인해야 합니다. 작은따옴표, 큰따옴표, 세미콜론, 쉼표, 콜론, 연결 번호 등과 같은 일부 특수 문자를 변환하거나 필터링합니다.
필터링해야 하는 특수 문자와 문자열은 다음과 같습니다.
순 사용자
xp_cmdshell
/추가하다
exec master.dbo.xp_cmdshell
순 로컬 그룹 관리자
선택하다
세다
오름차순
숯
중반
''
:
"
끼워 넣다
에서 삭제
드롭 테이블
업데이트
잘리다
~에서
%
다음은 참고용으로 주입 공격 해결에 관해 제가 작성한 예방 코드 2개입니다!
SQL 주입 공격을 방지하기 위한 Node.js 버전의 코드:
<스크립트 언어="****">
<!--
var url = 위치.검색;
var re=/^?(.*)(select%20|insert%20|delete%20from%20|count(|drop%20table|update%20truncate%20|asc(|mid(|char (|xp_cmdshell|exec%20master|net%20localgroup%20administrators|"|../../image/bbs3000/whatchutalkingabout_smile.gifnet%20user|''|%20or%20)(.*)$/gi;
var e = re.test(url);
만약(e) {
Alert("주소에 잘못된 문자가 포함되어 있습니다~");
위치.href="error.asp";
}
//-->
<스크립트>
[코드 끝]
SQL 주입 공격을 방지하기 위한 ASP 버전의 코드~:
[코드 시작]
<%
오류 발생 시 다음 재개
Dim strTemp
If LCase(Request.ServerVariables("HTTPS")) = "off" Then
strTemp = "http://"
또 다른
strTemp = "https://"
End If
strTemp = strTemp & Request.ServerVariables("SERVER_NAME")
If Request.ServerVariables("SERVER_PORT") <> 80 Then strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT")
strTemp = strTemp & Request.ServerVariables("URL")
If Trim(Request.QueryString) <> "" Then strTemp = strTemp & "?" & Trim(Request.QueryString)
strTemp = LCase(strTemp)
If Instr(strTemp,"select%20") 또는 Instr(strTemp,"insert%20") 또는 Instr(strTemp, "delete%20from") 또는 Instr(strTemp,"count(") 또는 Instr(strTemp,"drop%20table") 또는 Instr(strTemp,"update%20") 또는 Instr(strTemp,"truncate%20") 또는 Instr(strTemp,"asc(") 또는 Instr(strTemp,"mid(") 또는 Instr(strTemp,"char(") 또는 Instr(strTemp,"xp_cmdshell") 또는 Instr(strTemp,"exec%20master") 또는 Instr(strTemp,"net%20localgroup%20administrators") 또는 Instr(strTemp,":") 또는 Instr(strTemp,"net%20user") 또는 Instr(strTemp,"''") 또는 Instr(strTemp,"%20or %20") 그런 다음
응답.쓰기 "<스크립트 언어=''****''>"
Response.Write "alert(''잘못된 주소!!'');"
응답.쓰기 "location.href=''error.asp'';"
응답."<스크립트>" 쓰기
종료 조건
%>
다음은 비교적 간단한 예방법들입니다. 모두들 잘 알고 계시는 방법들입니다. 도움이 되셨으면 좋겠습니다~
주로 숫자 변수 전송용:
id = Request.QueryString("id")
If Not(isNumeric(id)) 그렇다면
응답."잘못된 주소~"라고 써주세요
응답.종료
종료 조건