2011-03-27 8 views
4

는 이미 Securing AJAX Requests via GUIDSecuring an ajax request 를 참조하십시오. 이제 시나리오를 설명해 드리겠습니다. 주제 아래에 설명하는 데 도움이되는 코드 스 니펫이 나와 있습니다.보안 아약스 요청

[WebMethod[EnableSession = True] 
[ScriptMethod] 

    public static string CreateTitle(string strTitleName) 
    { 
    string strResult = "Custom jSon string"; 
    if(Session["Authorized"] == "True" && !String.IsNullOrEmpty(strTitleName)) 
    { 
     String strTitle = Server.HtmlEncode(strTitleName); 
     InsertRecordInDB(strTitle); 
     strResult = "Custom jSOn string" + EncryptMD5("record id"); 
    } 
      return strResult; 
    } 

이하는 매개 변수를 보내기위한 javascript 호출입니다. btnCreateTitle_click은 버튼 클라이언트 측의 click 이벤트입니다. txtTitle은 제목 이름을 수락하는 텍스트 상자입니다. 검사기는 함수의 성공은 제목 작성 및 쿼리 문자열로 암호화 된 레코드 ID와 링크를 표시 한 으르렁 메시지가 표시 too.CreateTitle 내가 스크립트 관리자

function btnCreateTitle_Click(evnt){ 
if(Page.ClientValidate()){ 
if($get("txtTitle")){ 
PageMethods.CreateTitle($get("txtTitle").value,success,failure,context); 
}}} 

를 사용하여 호출 페이지 방법 텍스트 상자의 유효성을 검사 페이지에 생성됩니다 생성 된 제목의 세부 정보를 보려면 URL을 참조하십시오. 이제 굽기 질문

,

  1. 이 충분히 안전한가요? 나는 무엇을 놓치고 있습니까?
  2. 어떻게 프로세스를보다 안전하고 빠르게 만들 수 있습니까?
+0

무엇이 레코드 ID를 암호화합니까? 너 소금이야? 사용자가 액세스 할 수없는 다른 ID를 추측하는 것을 멈추게 할 수 있습니까? 그것을 암호화하는 것은 그다지 도움이되지 않습니다. 귀하의 인증 클라이언트를 어떻게 알지 못하면 말할 수 없습니다. 쿠키 기반 인증은 일반적으로 안전하고 SSL을 통해 항상 실행할 수 있습니다. –

+0

@ Simon yeah 나는 기록 ID를 염두에두고 트랜잭션을 실행하는 동안 그 사람이 자신이 생성 한/액세스 한 레코드를 업데이트하고 있는지 확인합니다. – Deeptechtons

+0

보안의 어떤 측면이 당신을 걱정합니까? 어떤 문제를 해결하려고합니까? – Xhalent

답변

3

인증 된 사용자와 인증 된 사용자를 제한하는 것은 쉬운 일이 아니지만 쿼리 문자열에 db id를 노출하면 인증되고 권한이 부여 된 사용자가 그렇지 않은 레코드에 액세스 할 가능성이 있습니다. 이것은 db id가 정수 또는 다른 쉽게 추측 된 식별자 일 때 특히 그렇습니다. Guids를 db id로 사용하면 절대적으로는 아니지만이 위험을 줄일 수 있습니다.

항상 기억해야 할 것은 입력하지 마십시오. 불명료 (예 : 암호화 등)를 통한 보안은 신뢰할 수있는 기술이 아닙니다. 서비스는 현재 사용자가 요청한 레코드를 검색 할 수 있는지 항상 확인해야합니다. 때로는이를 행 레벨 보안이라고합니다. 이는 프로그래밍 방식으로 만 수행 할 수 있습니다.

예를 들어 누군가가 레코드를 볼 수있는 권한이 있다고 판단하는 대신 요청하는 레코드에 실제로 액세스 할 권한이 있는지 확인해야합니다.

즉, 인증 된 사용자에게 레코드를 관련시키는 방법이 필요합니다.

BTW : 모든 HTTP 요청은 잠재적으로 위험한 입력에 대해 유효성이 검사됩니다.

도움이 되었으면

+0

기대했던 것보다 더 유익한 대답이었습니다. 그래서 저는 보안을 위해 더 많은 프로그램을 만들어야 할 것입니다. 또한 암호화도 그렇게 안정적이지 않습니다.감사합니다 – Deeptechtons

+0

이것은 분명히 당신이 찾고 있던 대답입니다. 내 답변은 구현의 제안 이라기보다는 좋은 설명이므로 삭제했습니다. IPrincipalPermission 특성을 사용하여 특정 역할을 요구할 수 있으며 일부 작업은 사용자 지정 역할로 작동하도록 만들 수 있습니다. – Ernesto