2011-09-02 3 views
3

웹 개발 및 인계 코드를 처음 사용하는 경우. SQL Server 데이터베이스에 대해 SQL 주입을 방지하는 기능이 있습니다.SQL Server 삽입

function safe(val, maxsize) 
    dim i, 
    terms = array(
     "cast", 
     "select", 
     "varchar", 
     "declare", 
     "drop", 
     ";", 
     "--", 
     "insert", 
     "delete", 
     "xp_" 
    ) 
    val = left(val,maxsize) 
    val = trim(val) 
    for i = 0 to ubound(terms) 
     val = replace(val, terms(i), "e_" & val & "_e", vbTextCompare) 
    next 
    val = replace(val, "'", "''") 
    makesafe = val 
end function 

주저하지 말고 만지지 마십시오. 때때로 그들은

+8

해킹당한 경우 올바르게 삽입해야합니다. 매개 변수가있는 명령문을 사용하고 올바른 데이터 유형을 사용하고 입력을 확인하고 사용자 (또는 앱)가 제출 한 문자열을 기반으로 SQL 문을 작성하지 않습니다. 이 "안전한"기능은 거짓 보안 담요처럼 느껴집니다. –

+2

SQL 문을 직접 연결하는 대신 ** 매개 변수화 된 쿼리 **를 사용하는 것은 ** 유일한 ** 실행 가능한 방법입니다. 당신의 입력을 "소독"하는 것을 잊어 버리십시오 - 당신은 항상 무언가를 잊을 것입니다 - 그냥 매개 변수화 된 질의를 사용하고 그것으로 끝내십시오 .... –

+0

'exec'은 어떻습니까? – tugberk

답변

4

해킹받을 것 같은데 다음 문서가 도움이 될 것입니다

http://tugberkugurlu.com/archive/sql-injection-vs-lethal-injection-protection-against-sql-injection

을 내가 완전히 그 기능을 스크랩하고 매개 변수를 사용하여 시작할 것 string.Replace

+0

+1 절대적으로 유일한 유용한 해결책은이 기사가 완전히 동의 한 –

+1

@ marc_s를 보여주기 때문에 ** 매개 변수화 된 쿼리입니다. 또한 EntityFramework 또는 Linq to SQL도 도움이됩니다. – tugberk

+0

이것은 고전적인 ASP에서 VBScript처럼 보입니다. 그래서 EF 또는 Linq2SQL로 이동하는 것이 좀 더 복잡 할 수 있습니다. –

2

와 함께이 길을 갈 좋은 생각이 아니다 아론과 같은 성명서는 그의 말에서 언급했다. 전에 그렇게 해보지 않았다면 그렇게하는 방법에 대해 다양한 articles이 있습니다. 내가 연결된 문서에서 2 단계를보십시오.

2

SQL 인젝션 공격을 막기 위해이 기능을 사용하지 않을 것입니다. 매개 변수가있는 쿼리는 필수 항목입니다. 당신이 열거 한 방법의 접근법을 사용하여 놓칠 수있는 주사 문구는 거의 확실합니다.

관련 문제