3+3 ASP.NET 실수(+ 이를 피하는 방법)

인터넷은 위험한 곳입니다. 해커는 항상 시스템에 침입하여 데이터를 훔칠 새로운 방법을 찾고 있습니다.

개발자로서 애플리케이션을 보호하는 것이 얼마나 중요한지 알고 있습니다. 앱이 해킹되면 귀하와 귀하의 고객에게 큰 문제가 될 수 있습니다. 인터넷 보안 위반 및 사이버 공격이 증가함에 따라 앱 보호가 그 어느 때보다 중요해졌습니다.

잠재적인 위협을 방지하기 위해 몇 가지 실수와 ASP.NET 응용 프로그램을 더 잘 보호하는 데 도움이 되는 실수를 피하는 방법을 공유하겠습니다.

3+3은 일반적인 간단한 것 3개와 보안적인 것 3개를 설명할 것입니다. 가장 일반적인 것부터 시작하겠습니다.


ASP.NET에서 흔히 저지르는 3가지 실수 📚



LINQ 쿼리의 ToLower()가 작동하지 않음


ToLower 함수는 문자열의 소문자 복제본을 반환합니다. 그러나 여러 소스의 숫자를 비교하려고 하면 당황스러운 오류가 발생할 수 있습니다. 다음 예를 고려하십시오.

list = (from ds in dbContext.dotnetsaferServices
             join c in dbContext.customer on ds.customerName equals c.customerName)
              where  (ds.shield.number.ToLower().Contains(productLicense.ShieldNumber.ToLower()))


한 가지 접근 방식은 IndexOf 대신 쿼리 내에서 대소문자를 구분하지 않는OrdinalIgnireCase 속성만 사용하는 것입니다.ToLower.

list = (from ds in dbContext.dotnetsaferServices
join c in dbContext.customer on ds.customerName equals c.customerName)
Where (ds.shield.number.IndexOf(productLicense.ShieldNumber, StringComparison.OrdinalIgnoreCase) != -1))



종속성 주입을 사용하지 않음



컨트롤러가 아래와 같이 사용자에게 전달할 수 있는 Foo를 얻기 위해 FooService가 필요하다고 가정합니다.

public class FooController
{
    public IActionResult Index()
    {
        var fooService = new FooService(new BarService(), new BazService());
        return View(fooService.GetFoo());
    }
}


문제는 컨트롤러가 FooService를 설정하는 방법에 대한 세부 사항을 요구한다는 것입니다. 이는 FooService가 필요할 때마다 이러한 추론을 반복해야 함을 의미합니다.

종속성 주입은 ASP.NET 5 MVC 6의 기본 제공 기능입니다. 따라서 생성자에서 종속성을 나타낼 수 있습니다. 그러면 ASP.NET 5 프레임워크가 우리를 대신하여 제출합니다.


Var 키워드의 잘못된 사용


var 키워드의 오용 및 남용은 일반적이고 근본적인 문제입니다. var의 진정한 기능은 지역 변수가 어떤 유형인지 모를 때 지역 변수를 선언할 수 있도록 하는 것입니다. 컴파일 시간까지 유형 이름이 무엇인지 모르기 때문에 익명 유형의 경우에 자주 발생합니다.

그럼에도 불구하고 일부 프로그래머는 변수를 정의할 때마다 var를 사용합니다. 지역 변수 선언의 유형 이름은 또 다른 설명 계층을 추가합니다.

// let's say you have a static method called GetProducts()
// that returns System.Data.DataTable
var products = GetProducts(ModelTypes.Subscription);

// how is it clear to the reader that I can do this?
return products.Compute("MAX(Price)", String.Empty);



ASP.NET에서 저지르는 3가지 보안 실수 💻



Web.config에 비밀 저장



이는 암호화 키를 web.config 파일에 저장하여 시간을 절약하려는 욕구에서 비롯됩니다. 예를 들면 다음과 같습니다.

<appSettings>
<add key="AWS" value="someSecret" />
<add key="Database" value="someKey" />
</appSettings>

web.config file에 비밀을 유지해서는 안 됩니다. 따라서 아래와 같이 코드를 보호된 파일로 리디렉션해야 합니다.

<appSettings file="Web.SECRETS.config">
<add key="Database" value="someSecret" />
</appSettings>



잠재적으로 위험한 결과가 포함된 요청.양식 값



기본적으로 ASP.NET MVC는 XSS(Cross Site Scripting) 공격을 방지하기 위해 이러한 종류의 코드가 서버로 전송되는 것을 방지하기 때문에 오류가 발생합니다. 다음은 HTML 코드를 서버로 전송하려고 할 때 발생하는 문제에 대한 수정 사항입니다.

아래에 설명된 대로 모델 클래스의 AllowHtml 특성을 사용하여 특정 필드에 대한 ASP.NET MVC 유효성 검사를 비활성화할 수 있습니다.

public class ProductModel
{
    [Display(Name = "Description:")]
    [AllowHtml]
    public string Description { get; set; }
}



클라이언트에 XSRF 토큰을 사용하지 않음



교차 사이트 요청 위조는 XRSF 토큰을 통해 방지됩니다. 브라우저가 암시적으로 사용자를 인증할 수 있을 때마다 이를 활용해야 합니다. 여기에는 Windows 인증을 사용하거나 쿠키를 사용하는 자동 인증을 사용하는 프로그램이 포함됩니다.

예를 보자:

[Route("api/[controller]")]
public class SecurityController : Controller
{
    private readonly IAntiforgery _antiforgery;

    public SecurityController(IAntiforgery antiforgery)
    {
        _antiforgery = antiforgery;
    }

   [HttpGet]
    public IActionResult Get()
    {
        var tokens = _antiforgery.GetAndStoreTokens(HttpContext);

        return new ObjectResult(new {
            token = tokens.RequestToken,
            tokenName = tokens.HeaderName
        });
    }
}



ASP.NET은 오픈 소스이거나 상용일 수 있는 웹 개발 프레임워크입니다. ASP.NET은 웹 페이지, 웹 응용 프로그램 및 XML 웹 서비스를 만드는 데 사용됩니다.

보안은 SQL 삽입 및 XSS(교차 사이트 스크립팅)의 일반적인 취약성으로 인해 오늘날 많은 ASP.NET 응용 프로그램의 주요 문제입니다.

개발자가 오류 없는 소프트웨어 제품을 만드는 것은 어렵지만 위에서 언급한 이러한 일반적인 보안 오류는 ASP.NET 응용 프로그램을 개발할 때 쉽게 피할 수 있습니다.

좋은 웹페이지 즐겨찾기