[SQL] 어떻게 ASP.NET 응용 프로그램에서 SQL 주입 공격을 피할 수있다?
SQL어떻게 ASP.NET 응용 프로그램에서 SQL 주입 공격을 피할 수있다?
내 ASP.NET 응용 프로그램에서 SQL 주입에 취약하지 않도록해야합니다. 이걸 어떻게 달성 할 수 있는가?
해결법
-
==============================
1.귀하의 질문은 매우 일반적인에도 불구하고, 몇 가지 규칙이 항상 적용
귀하의 질문은 매우 일반적인에도 불구하고, 몇 가지 규칙이 항상 적용
-
==============================
2.(사용 섹션 '제품에 대한 노드를 추가하려면'를에 제표를 작성한다는 ASP.NET 튜토리얼에 링크) 문 준비를 사용합니다. 그게 전부입니다.
(사용 섹션 '제품에 대한 노드를 추가하려면'를에 제표를 작성한다는 ASP.NET 튜토리얼에 링크) 문 준비를 사용합니다. 그게 전부입니다.
음, 또는 ORM을 사용하는 것이, SQL 또는 NHibernate에 Linq에처럼, 그들은 내부적으로 준비된 문을 사용합니다.
-
==============================
3.매개 변수를 사용! 그것은 정말 간단합니다 :-)
매개 변수를 사용! 그것은 정말 간단합니다 :-)
(C 번호와 MS SQL 서버에 대한)이 같은 쿼리를 작성합니다 :
SqlCommand getPersons = new SqlCommand("SELECT * FROM Table WHERE Name = @Name", conn);
여기 @Name는 SQL 주입을 방지하기 위해 원하는 CONN SqlConnection 개체 인 매개 변수입니다. 그런 다음 다음을 수행 매개 변수 값을 추가합니다 :
getPersons.Parameters.AddWithValue("@Name", theName);
여기 theName 당신이 찾고있는 이름이 포함 된 변수입니다.
지금은 해당 쿼리에 모든 SQL 주입을하는 것은 불가능합니다.
그것은이 간단한이기 때문에 매개 변수를 사용하지 않을 이유가 없다.
-
==============================
4.절대 신뢰 사용자 입력 - 유효성 검사 컨트롤, 정규식, 코드를 사용하여 유효성 모든 텍스트 상자 항목 등
절대 신뢰 사용자 입력 - 유효성 검사 컨트롤, 정규식, 코드를 사용하여 유효성 모든 텍스트 상자 항목 등
절대로 동적 SQL을 사용하지 - 사용이 SQL 또는 저장 프로 시저를 매개 변수화
절대로 관리자 수준 계정을 사용하여 데이터베이스에 연결하지 - 사용에게 제한된 액세스 계정을 데이터베이스에 연결
일반 텍스트 비밀 보관하지 마십시오 - 암호화 또는 해시 암호 및 기타 민감한 데이터를; 당신은 또한해야 암호화 된 연결 문자열
예외가 최소한의 정보를 공개해야 - 음주 오류 메시지에 너무 많은 정보를 공개하지; 처리되지 않은 에러의 경우에 최소한의 정보를 표시하기를 customErrors에 사용; false로 설정 디버그
MSDN 정지 SQL 주입에 대한 유용한 링크
-
==============================
5.데이터베이스에 쿼리 예를 들어, 실시간으로 건설되고 있기 때문에 SQL 주입이 발생합니다 :
데이터베이스에 쿼리 예를 들어, 실시간으로 건설되고 있기 때문에 SQL 주입이 발생합니다 :
SELECT * From Table1 WHERE " + UserInput
UserInput 사용자가 악성 당신이 의도하지 않는 다른 문을 포함 할 수있다.
이를 방지하려면, 당신은 함께 귀하의 요청을 연결하지 않도록해야합니다.
당신은 매개 변수화 된 쿼리를 사용하여이 작업을 수행 할 수 있습니다 - 특정 DB 맛의 DBCommand 개체를 확인하십시오.
-
==============================
6.사용 쿼리 및 / 또는 저장 프로 시저를 매개 변수화 및 SQL 매개 변수를 통해 매개 변수를 구문 분석합니다. 문자열을 연결하여 SQL 코드를 생성하지 마십시오. 또한 SQL 주입에 대한 및 SQL 주입을 방지하는 보안의 작은 부분이기 때문에, 보안 코드 작성에 대한 몇 가지 독서을한다. (- 크로스 사이트 스크립팅 XSS 같은) 더 많은있다. 해커가 사이트 / 응용 프로그램을 타협하기를 원한다면 그는 더 만 SQL 주입을 찾습니다.
사용 쿼리 및 / 또는 저장 프로 시저를 매개 변수화 및 SQL 매개 변수를 통해 매개 변수를 구문 분석합니다. 문자열을 연결하여 SQL 코드를 생성하지 마십시오. 또한 SQL 주입에 대한 및 SQL 주입을 방지하는 보안의 작은 부분이기 때문에, 보안 코드 작성에 대한 몇 가지 독서을한다. (- 크로스 사이트 스크립팅 XSS 같은) 더 많은있다. 해커가 사이트 / 응용 프로그램을 타협하기를 원한다면 그는 더 만 SQL 주입을 찾습니다.
-
==============================
7.스콧 거스리는 다시 동안이 약 괜찮은 작은 기사를 배치했다. 그것에서는, 그는 자신을 보호하기위한 5 개 제안을 제공합니다 :
스콧 거스리는 다시 동안이 약 괜찮은 작은 기사를 배치했다. 그것에서는, 그는 자신을 보호하기위한 5 개 제안을 제공합니다 :
그는 이러한 여러 가지 다른 리소스에 대한 링크뿐만 아니라이 중요하며, 이유를 설명 괜찮은 일을 ...
-
==============================
8.결코 신뢰 사용자 입력, 항상 그것을 확인하고 SQL 매개 변수를 사용합니다. 방지 SQL 주입에 충분한 근거가 될 것이다.
결코 신뢰 사용자 입력, 항상 그것을 확인하고 SQL 매개 변수를 사용합니다. 방지 SQL 주입에 충분한 근거가 될 것이다.
-
==============================
9.희망이 도움이 될 것입니다 :
희망이 도움이 될 것입니다 :
http://www.codersbarn.com/post/2008/11/01/ASPNET-Data-Input-Validation.aspx
짧은 대답은 매개 변수화 된 쿼리를 사용하는 것입니다.
앤서니 :-) www.codersbarn.com
-
==============================
10.항상에만 매개 변수화 된 쿼리를 사용합니다.
항상에만 매개 변수화 된 쿼리를 사용합니다.
-
==============================
11.다른 사람이 말했듯이, 동적 SQL 문을 만들 CONCATENATE 사용자 입력하지 않습니다; 동적 SQL을 사용하는 경우 항상 매개 변수화 된 SQL을 사용합니다. 그러나 나는 저장된 프로 시저의 동적 SQL의 내부를 만들 때이 규칙도 적용된다는 것을 지적 할 것이다. 이 사실은 사람들이 종종 간과 무언가이다. 그들은이기 때문에 그들이 안전하다고 생각 "저장 프로 시저를 사용하여."
다른 사람이 말했듯이, 동적 SQL 문을 만들 CONCATENATE 사용자 입력하지 않습니다; 동적 SQL을 사용하는 경우 항상 매개 변수화 된 SQL을 사용합니다. 그러나 나는 저장된 프로 시저의 동적 SQL의 내부를 만들 때이 규칙도 적용된다는 것을 지적 할 것이다. 이 사실은 사람들이 종종 간과 무언가이다. 그들은이기 때문에 그들이 안전하다고 생각 "저장 프로 시저를 사용하여."
-
==============================
12.이 책, "건물의 ASP.NET 응용 프로그램 보안은"가이드 라인은이 주제에 대한 섹션이 있습니다.
이 책, "건물의 ASP.NET 응용 프로그램 보안은"가이드 라인은이 주제에 대한 섹션이 있습니다.
-
==============================
13.사용 XSS는 Microsoft.Security.Application.AntiXss.UrlEncode 및 SQL 주입을 사용하여 작동하지 않습니다를 urlencode 확보. JSON - - 직렬화 및 역 직렬화 또는 당신은 ASP.NET을 사용할 수 있습니다
사용 XSS는 Microsoft.Security.Application.AntiXss.UrlEncode 및 SQL 주입을 사용하여 작동하지 않습니다를 urlencode 확보. JSON - - 직렬화 및 역 직렬화 또는 당신은 ASP.NET을 사용할 수 있습니다
또한 맥아피 무료 도구에서 SiteDigger 사용하여 응용 프로그램을 테스트합니다.
몇 여기에서있다
.NET 보안 툴킷 v1.0을 .NETMon v1.0을 Validator.NET V1.0
-
==============================
14.모두가 "사용 매개 변수"를 말한다. 우리는 그렇게 심술 궂게 어렵지 않았다 작은 경우를 말해야 할 것입니다.
모두가 "사용 매개 변수"를 말한다. 우리는 그렇게 심술 궂게 어렵지 않았다 작은 경우를 말해야 할 것입니다.
사용 QueryFirst. 연결하는 유혹을 제거하고, 올바른 방법은 가장 쉬운 방법이된다. 이 도구는 나머지를, 당신의 SQL 그냥 타이핑 @myParam에 의해 매개 변수를 만들 수 있습니다.
면책 조항 : 나는 QueryFirst를 썼다
-
==============================
15.정확히 SQL 주입이고 다음에 취약 아무것도 쓰지 않을 것을 이해합니다.
정확히 SQL 주입이고 다음에 취약 아무것도 쓰지 않을 것을 이해합니다.
-
==============================
16.저장 프로 시저를 사용하려고하고 데이터의 입력을 확인합니다. INSERT INTO 같은 직접적인 SQL을 사용하지 마십시오 ...
저장 프로 시저를 사용하려고하고 데이터의 입력을 확인합니다. INSERT INTO 같은 직접적인 SQL을 사용하지 마십시오 ...
from https://stackoverflow.com/questions/305044/how-can-i-avoid-sql-injection-attacks-in-my-asp-net-application by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL 매개 변수를 전달하고, 내가 필요한 이유는 무엇입니까? (0) | 2020.04.21 |
---|---|
[SQL] 선택 카운트 (ID) 또는 존재 (...) : 항목의 존재 여부가 있는지 확인하는 가장은 무엇입니까? (0) | 2020.04.21 |
[SQL] 합니까 포스트 그레스 지원 중첩 또는 자율 거래? (0) | 2020.04.21 |
[SQL] 왜 Access에서 LIKE 쿼리는 레코드를 반환하지 않는 이유는 무엇입니까? (0) | 2020.04.21 |
[SQL] 어떻게 .. SQL 서버에서 전역 변수를 선언하려면? (0) | 2020.04.21 |