SQL 주입 공격은 설계 취약점을 악용, 대상 서버에서 SQL 명령 실행 및 기타 공격을 의미합니다.
SQL 주입 공격이 SQL 명령을 동적으로 생성 할 때 성공하는 주된 이유는 발생합니다.
예를 들어:
쿼리 문이 선택된 경우 inserername = ' "& user &"'및 password = ' "& pwd &"' "
그런 다음 내 사용자 이름이 1 '또는'1 '='1 인 경우
그러면 쿼리 명령문이됩니다.
admin에서 *를 선택하십시오. 여기서 username = '1 또는'1 '='1 '및 password =' "& pwd &" ' "
이러한 방식으로 쿼리 문이 전달되며 관리 인터페이스를 입력 할 수 있습니다.
따라서 방지 할 때는 사용자의 입력을 확인해야합니다. 단일 따옴표, 이중 인용문, 세미콜론, 쉼표, 콜론, 연결 등과 같은 특수 특수 문자는 변환 또는 필터링됩니다.
필터링 해야하는 특수 문자와 문자열은 다음과 같습니다.
순 사용자
XP_CMDSHELL
/추가하다
exec master.dbo.xp_cmdshell
순 지역 그룹 관리자
선택하다
세다
ASC
숯
중간
'
:
"
끼워 넣다
삭제
드롭 테이블
업데이트
잘립니다
~에서
비율
다음은 학습 참조를위한 주입 공격 해결에 대해 쓴 두 가지 예방 코드입니다!
SQL 주입 공격 코드의 JS 버전 ~ :
[코드 시작]
<script language = "javaScript">
<!-
var url = location.search;
var re =/^/? (.*) (선택%20 | 삽입%20 | 삭제%20from%20 | count/(| drop%20table | 업데이트%20Trate%20 | asc/(| mid/(| char/) (| xp_cmdshell | exec%20master | net%20localgroup%20administrators |/"| : | net%20user |/'|%20oR%20) (.*) $/gi;
var e = Re.test (URL);
if (e) {
Alert ( "주소에는 불법 문자가 포함되어 있습니다 ~");
location.href = "error.asp";
}
//->
<cript>
[코드 끝]
SQL 주입 공격을 방지하기위한 코드의 ASP 버전 ~ :
[코드 시작]
<%
다음에 오류가 재개됩니다
Dim Strtemp
lcase (request.servervariables ( "https")) = "off"인 경우
strtemp = "http : //"
또 다른
strtemp = "https : //"
끝 If
strtemp = strtemp & request.servervariables ( "server_name")
If request.servervariables ( "server_port") <> 80 그런 다음 strtemp = strtemp & ":"& request.servervariables ( "server_port")
strtemp = strtemp & request.servervariables ( "url")
if trim (request.querystring) <> ""strtemp = strtemp & "?"
strtemp = lcase (strtemp)
악기 (strtemp, "select%20") 또는 악기 (strtemp, "insert%20") 또는 악기 (strtemp, "delete%20from") 또는 악기 (strtemp, "count (") 또는 악기 (strtemp, drop”인 경우 %20table ") 또는 악기 (strtemp,"업데이트%20 ") 또는 악기 (strtemp,"truncate%20 ") 또는 악기 (strtemp,"asc ( ") 또는 악기 (strtemp,"mid ( ") 또는 악기 (strtemp) , "char (") 또는 instr (strtemp, "xp_cmdshell") 또는 악기 (strtemp, "exec%20master") 또는 Instr (strtemp, "net%20localgroup%20administrators") 또는 악기 (strtemp”, ") 또는 악기 (strtemp,"net%20user ") 또는 악기 (strtemp,” ' ") 또는 악기 (strtemp,"%20or%20 ")
response.write "<script language = 'javaScript'>"
응답. "Alert ( '불법 주소 !!');"
response.write "location.href = 'error.asp';"
response.write "<cript>"
끝 If
%>
[코드 끝]
C# SQL 주입 공격을 방지하기위한 문자열을 확인하십시오
이 예에서는 잠정적으로 AS = 및 '숫자로 지정됩니다.
bool checkparams (params object [] args)
{
문자열 [] 습격 = { "=", " '"};
if (lawlesses == null || lawlesses.length <= 0) true;
// 정규 표현식 구성, 예 : 예 : 불법은 = 부호이고 '부호, 정규 표현은.* [=}'].* (정규 표현의 관련 내용에 대해서는 MSDN을 참조하십시오).
// 기능을 쉽게 수정하고 싶기 때문에 캐릭터 배열에서 정규 표현식에 이르기까지 다른 단계를 직접 작성할 수도 있습니다.
문자열 str_regex = ".*[";
for (int i = 0; i <lawlesses.length-1; i ++)
str_regex+= 법률 없음 [i]+"|";
STR_REGEX+= LARCLESSES [LARGLESSES.LENGTH-1]+"].*";
//
foreach (Args의 객체 arg)
{
if (arg is string) // 문자열 인 경우 직접 확인하십시오
{
if (regex.matches (arg.tostring (), str_regex) .count> 0)
거짓을 반환합니다.
}
else if (arg is icollection) // 컬렉션 인 경우 컬렉션의 요소가 문자열인지 확인하십시오
{
foreach (Object obj in (icollection) arg)
{
if (obj is String)
{
if (regex.matches (obj.tostring (), str_regex) .count> 0)
거짓을 반환합니다.
}
}
}
}
진실을 반환하십시오.