복붙노트

[SQL] 어떻게 ASP.NET 응용 프로그램에서 SQL 주입 공격을 피할 수있다?

SQL

어떻게 ASP.NET 응용 프로그램에서 SQL 주입 공격을 피할 수있다?

내 ASP.NET 응용 프로그램에서 SQL 주입에 취약하지 않도록해야합니다. 이걸 어떻게 달성 할 수 있는가?

해결법

  1. ==============================

    1.귀하의 질문은 매우 일반적인에도 불구하고, 몇 가지 규칙이 항상 적용

    귀하의 질문은 매우 일반적인에도 불구하고, 몇 가지 규칙이 항상 적용

  2. ==============================

    2.(사용 섹션 '제품에 대한 노드를 추가하려면'를에 제표를 작성한다는 ASP.NET 튜토리얼에 링크) 문 준비를 사용합니다. 그게 전부입니다.

    (사용 섹션 '제품에 대한 노드를 추가하려면'를에 제표를 작성한다는 ASP.NET 튜토리얼에 링크) 문 준비를 사용합니다. 그게 전부입니다.

    음, 또는 ORM을 사용하는 것이, SQL 또는 NHibernate에 Linq에처럼, 그들은 내부적으로 준비된 문을 사용합니다.

  3. ==============================

    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. ==============================

    4.절대 신뢰 사용자 입력 - 유효성 검사 컨트롤, 정규식, 코드를 사용하여 유효성 모든 텍스트 상자 항목 등

    절대 신뢰 사용자 입력 - 유효성 검사 컨트롤, 정규식, 코드를 사용하여 유효성 모든 텍스트 상자 항목 등

    절대로 동적 SQL을 사용하지 - 사용이 SQL 또는 저장 프로 시저를 매개 변수화

    절대로 관리자 수준 계정을 사용하여 데이터베이스에 연결하지 - 사용에게 제한된 액세스 계정을 데이터베이스에 연결

    일반 텍스트 비밀 보관하지 마십시오 - 암호화 또는 해시 암호 및 기타 민감한 데이터를; 당신은 또한해야 암호화 된 연결 문자열

    예외가 최소한의 정보를 공개해야 - 음주 오류 메시지에 너무 많은 정보를 공개하지; 처리되지 않은 에러의 경우에 최소한의 정보를 표시하기를 customErrors에 사용; false로 설정 디버그

    MSDN 정지 SQL 주입에 대한 유용한 링크

  5. ==============================

    5.데이터베이스에 쿼리 예를 들어, 실시간으로 건설되고 있기 때문에 SQL 주입이 발생합니다 :

    데이터베이스에 쿼리 예를 들어, 실시간으로 건설되고 있기 때문에 SQL 주입이 발생합니다 :

    SELECT * From Table1 WHERE " + UserInput
    

    UserInput 사용자가 악성 당신이 의도하지 않는 다른 문을 포함 할 수있다.

    이를 방지하려면, 당신은 함께 귀하의 요청을 연결하지 않도록해야합니다.

    당신은 매개 변수화 된 쿼리를 사용하여이 작업을 수행 할 수 있습니다 - 특정 DB 맛의 DBCommand 개체를 확인하십시오.

  6. ==============================

    6.사용 쿼리 및 / 또는 저장 프로 시저를 매개 변수화 및 SQL 매개 변수를 통해 매개 변수를 구문 분석합니다. 문자열을 연결하여 SQL 코드를 생성하지 마십시오. 또한 SQL 주입에 대한 및 SQL 주입을 방지하는 보안의 작은 부분이기 때문에, 보안 코드 작성에 대한 몇 가지 독서을한다. (- 크로스 사이트 스크립팅 XSS 같은) 더 많은있다. 해커가 사이트 / 응용 프로그램을 타협하기를 원한다면 그는 더 만 SQL 주입을 찾습니다.

    사용 쿼리 및 / 또는 저장 프로 시저를 매개 변수화 및 SQL 매개 변수를 통해 매개 변수를 구문 분석합니다. 문자열을 연결하여 SQL 코드를 생성하지 마십시오. 또한 SQL 주입에 대한 및 SQL 주입을 방지하는 보안의 작은 부분이기 때문에, 보안 코드 작성에 대한 몇 가지 독서을한다. (- 크로스 사이트 스크립팅 XSS 같은) 더 많은있다. 해커가 사이트 / 응용 프로그램을 타협하기를 원한다면 그는 더 만 SQL 주입을 찾습니다.

  7. ==============================

    7.스콧 거스리는 다시 동안이 약 괜찮은 작은 기사를 배치했다. 그것에서는, 그는 자신을 보호하기위한 5 개 제안을 제공합니다 :

    스콧 거스리는 다시 동안이 약 괜찮은 작은 기사를 배치했다. 그것에서는, 그는 자신을 보호하기위한 5 개 제안을 제공합니다 :

    그는 이러한 여러 가지 다른 리소스에 대한 링크뿐만 아니라이 중요하며, 이유를 설명 괜찮은 일을 ...

  8. ==============================

    8.결코 신뢰 사용자 입력, 항상 그것을 확인하고 SQL 매개 변수를 사용합니다. 방지 SQL 주입에 충분한 근거가 될 것이다.

    결코 신뢰 사용자 입력, 항상 그것을 확인하고 SQL 매개 변수를 사용합니다. 방지 SQL 주입에 충분한 근거가 될 것이다.

  9. ==============================

    9.희망이 도움이 될 것입니다 :

    희망이 도움이 될 것입니다 :

    http://www.codersbarn.com/post/2008/11/01/ASPNET-Data-Input-Validation.aspx

    짧은 대답은 매개 변수화 된 쿼리를 사용하는 것입니다.

    앤서니 :-) www.codersbarn.com

  10. ==============================

    10.항상에만 매개 변수화 된 쿼리를 사용합니다.

    항상에만 매개 변수화 된 쿼리를 사용합니다.

  11. ==============================

    11.다른 사람이 말했듯이, 동적 SQL 문을 만들 CONCATENATE 사용자 입력하지 않습니다; 동적 SQL을 사용하는 경우 항상 매개 변수화 된 SQL을 사용합니다. 그러나 나는 저장된 프로 시저의 동적 SQL의 내부를 만들 때이 규칙도 적용된다는 것을 지적 할 것이다. 이 사실은 사람들이 종종 간과 무언가이다. 그들은이기 때문에 그들이 안전하다고 생각 "저장 프로 시저를 사용하여."

    다른 사람이 말했듯이, 동적 SQL 문을 만들 CONCATENATE 사용자 입력하지 않습니다; 동적 SQL을 사용하는 경우 항상 매개 변수화 된 SQL을 사용합니다. 그러나 나는 저장된 프로 시저의 동적 SQL의 내부를 만들 때이 규칙도 적용된다는 것을 지적 할 것이다. 이 사실은 사람들이 종종 간과 무언가이다. 그들은이기 때문에 그들이 안전하다고 생각 "저장 프로 시저를 사용하여."

  12. ==============================

    12.이 책, "건물의 ASP.NET 응용 프로그램 보안은"가이드 라인은이 주제에 대한 섹션이 있습니다.

    이 책, "건물의 ASP.NET 응용 프로그램 보안은"가이드 라인은이 주제에 대한 섹션이 있습니다.

  13. ==============================

    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. ==============================

    14.모두가 "사용 매개 변수"를 말한다. 우리는 그렇게 심술 궂게 어렵지 않았다 작은 경우를 말해야 할 것입니다.

    모두가 "사용 매개 변수"를 말한다. 우리는 그렇게 심술 궂게 어렵지 않았다 작은 경우를 말해야 할 것입니다.

    사용 QueryFirst. 연결하는 유혹을 제거하고, 올바른 방법은 가장 쉬운 방법이된다. 이 도구는 나머지를, 당신의 SQL 그냥 타이핑 @myParam에 의해 매개 변수를 만들 수 있습니다.

    면책 조항 : 나는 QueryFirst를 썼다

  15. ==============================

    15.정확히 SQL 주입이고 다음에 취약 아무것도 쓰지 않을 것을 이해합니다.

    정확히 SQL 주입이고 다음에 취약 아무것도 쓰지 않을 것을 이해합니다.

  16. ==============================

    16.저장 프로 시저를 사용하려고하고 데이터의 입력을 확인합니다. INSERT INTO 같은 직접적인 SQL을 사용하지 마십시오 ...

    저장 프로 시저를 사용하려고하고 데이터의 입력을 확인합니다. INSERT INTO 같은 직접적인 SQL을 사용하지 마십시오 ...

  17. 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