문제

클래식 ASP 앱의 SQL 주입로부터 보호하는 강력한 방법은 무엇입니까?

참고로 액세스 DB와 함께 사용하고 있습니다. (나는 앱을 쓰지 않았다)

도움이 되었습니까?

해결책

저장된 절차 및/또는 준비된 진술 :

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-injection-attacks

단일 쿼트와 주변 사용자 입력을 단일 값으로 탈출하여 SQL 주입로부터 보호 할 수 있습니까?

SQL 주입 및 기타 악의적 인 웹 요청을 잡습니다

Access DB를 사용하면 여전히 수행 할 수 있지만 이미 SQL 주입에 대해 걱정된다면 어쨌든 액세스 할 수 있어야한다고 생각합니다.

다음은 액세스 기술에 대한 링크입니다.

http://www.asp101.com/samples/storedqueries.asp

주사로부터 일반적으로 보호하는 것은 저장된 절차 자체가 아니라 매개 변수화되고 역동적이지 않다는 사실이라는 점에 유의하십시오. 동적 코드를 구축하는 SP조차도 동적 코드를 구축하기 위해 특정 방식으로 매개 변수를 사용하는 경우 주입에 취약 할 수 있습니다. 전반적으로 SPS는 응용 프로그램이 데이터베이스에 가져 오는 인터페이스 계층을 형성하기 때문에 선호하므로 앱은 먼저 임의 코드를 실행할 수 없습니다.

또한, 저장된 절차의 실행 지점은 명령 및 매개 변수를 사용하지 않으면 취약 할 수 있습니다. 예를 들어, 동적으로 구축되어 주입 대상이 될 수 있기 때문에 여전히 취약합니다.

Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ;

데이터베이스는 자체 주변을 방어해야하며 다양한 로그인이 INSERT/UPDATE/DELETE 테이블에서 해당 응용 프로그램 (또는 손상된 응용 프로그램)의 모든 코드는 잠재적 인 문제가 될 수 있습니다. 로그인에 저장된 절차를 실행할 권한 만있는 경우, 이는 정확한 동작을 훨씬 쉽게 보장 할 수있는 깔때기를 형성합니다. (객체가 인터페이스를 담당하고 모든 내부 작업을 노출시키지 않는 OO 개념과 유사합니다.)

다른 팁

다음은 오래 전에 간단한 버전과 확장 버전을 만든 몇 가지 sqlinject 스크립트입니다.

function SQLInject(strWords) 
dim badChars, newChars, i
badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") 
newChars = strWords 
for i = 0 to uBound(badChars) 
newChars = replace(newChars, badChars(i), "") 
next 
newChars = newChars 
newChars= replace(newChars, "'", "''")
newChars= replace(newChars, " ", "")
newChars= replace(newChars, "'", "|")
newChars= replace(newChars, "|", "''")
newChars= replace(newChars, "\""", "|")
newChars= replace(newChars, "|", "''")
SQLInject=newChars
end function 


function SQLInject2(strWords)
dim badChars, newChars, tmpChars, regEx, i
badChars = array( _
"select(.*)(from|with|by){1}", "insert(.*)(into|values){1}", "update(.*)set", "delete(.*)(from|with){1}", _
"drop(.*)(from|aggre|role|assem|key|cert|cont|credential|data|endpoint|event|f ulltext|function|index|login|type|schema|procedure|que|remote|role|route|sign| stat|syno|table|trigger|user|view|xml){1}", _
"alter(.*)(application|assem|key|author|cert|credential|data|endpoint|fulltext |function|index|login|type|schema|procedure|que|remote|role|route|serv|table|u ser|view|xml){1}", _
"xp_", "sp_", "restore\s", "grant\s", "revoke\s", _
"dbcc", "dump", "use\s", "set\s", "truncate\s", "backup\s", _
"load\s", "save\s", "shutdown", "cast(.*)\(", "convert(.*)\(", "execute\s", _
"updatetext", "writetext", "reconfigure", _
"/\*", "\*/", ";", "\-\-", "\[", "\]", "char(.*)\(", "nchar(.*)\(") 
newChars = strWords
for i = 0 to uBound(badChars)
Set regEx = New RegExp
regEx.Pattern = badChars(i)
regEx.IgnoreCase = True
regEx.Global = True
newChars = regEx.Replace(newChars, "")
Set regEx = nothing
next
newChars = replace(newChars, "'", "''")
SqlInject2 = newChars
end function

"클래식 ASP 앱에 대한 SQL 주입을 방지하는 강력한 방법"은 모든 입력을 무자비하게 검증하는 것입니다. 기간.

저장된 절차 단독 및/또는 다른 데이터베이스 시스템이 반드시 좋은 보안과 동일하지는 않습니다.

MS는 최근 쿼리에 사용되는 검증되지 않은 입력을 찾는 SQL 주입 검사 도구를 내놓았습니다. 그것이 당신이 찾고있는 것입니다.

다음은 링크입니다.SQL 주입 도구 용 Microsoft 소스 코드 분석기는 ASP 코드에서 SQL 주입 취약점을 찾을 수 있습니다.

매개 변수화 된 쿼리를 사용하면 명령 개체를 만들고 이름과 값으로 매개 변수를 할당해야합니다. 그렇다면 다른 것에 대해 걱정할 필요가 없습니다 (물론 SQL 주입을 참조하십시오;)).

http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html

저장된 절차를 신뢰하지 않으면 준비된 진술을 사용하지 않으면 공격 벡터가 될 수 있습니다.

저장된 절차가 옵션이 아니고 그렇더라도 - 모든 입력을 철저히 검증하십시오

이를 사용하는 개발자만큼 좋은 데이터베이스.

더 이상 아무것도 없습니다.

좋은 개발자 인 경우 텍스트 파일을 데이터베이스로 사용하여 전자 상거래 사이트를 구축 할 수 있습니다. 그렇습니다. Oracle Driven 웹 사이트만큼 좋지는 않지만 가정 기반의 맞춤형 보석 제조와 같은 소규모 비즈니스에는 적합합니다.

또한 좋은 개발자라면 ASP 페이지에서 인라인 SQL 문을 사용하지 않습니다. 액세스에서도 쿼리를 빌드하고 사용할 수있는 옵션이 있습니다.

HTML Encode와 함께 데이터 검증과 함께 Procs를 저장하는 것이 SQL 주입 공격을 방지하는 가장 좋은 방법입니다.

그만큼 SQL 주입 도구 용 Microsoft 소스 코드 분석기 ASP 코드에서 SQL 주입 취약점을 찾을 수 있습니다.

최소한 SQL Express로 전환하는 것은 훌륭한 옵션입니다. 그것은 훨씬 더 안전하게 만들 것입니다. 매개 변수와 저장된 절차를 사용하면 큰 도움이 될 수 있습니다. 또한 입력을 신중하게 검증하여 기대하는 것과 일치하는지 확인하는 것이 좋습니다.

숫자와 같은 값의 경우 숫자가 실제로 숫자인지 확인하기가 매우 쉽습니다. SQL의 모든 특수 문자를 탈출하십시오. 이렇게하면 시도 된 공격이 작동하는 것을 막을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top