2011-12-01 5 views
0

모든 쿼리 스트링을 암호화하고 해독하는 훌륭한 작은 HttpModule을 발견했습니다. 여기에 찾을 수 있습니다 : HttpModule for query string encryption쿼리 스트링을 암호화하기위한 HttpModule

내가 진짜로 해결 방법에 대한 몇 가지 입력을 사용할 수있는 하나의 주요 결함이 있습니다. 페이지의 포스트 백에서 HttpMethod POST는 건너 뛰고 QueryString은 해독 된 것으로 표시됩니다. 분명히 이것은 주요 보안 위험 요소입니다.

  else if (context.Request.HttpMethod == "POST") 
      { 
       if (!query.StartsWith(PARAMETER_NAME, StringComparison.OrdinalIgnoreCase)) 
       { 
        string encryptedQuery = Encrypt(query); 
        context.Response.Redirect(path + encryptedQuery); 
       } 
      } 

그러나 이것은 Response.Redirect를의 becuase 페이지를 다시로드 그래서 다시 게시가 쓸모가 :

void context_BeginRequest(object sender, EventArgs e) 
{ 
    try 
    { 
     HttpContext context = HttpContext.Current; 
     if (context.Request.Url.OriginalString.Contains("aspx") && context.Request.RawUrl.Contains("?")) 
     { 
      string query = ExtractQuery(context.Request.RawUrl); 
      string path = GetVirtualPath(); 

      if (query.StartsWith(PARAMETER_NAME, StringComparison.OrdinalIgnoreCase)) 
      { 
       // Decrypts the query string and rewrites the path. 
       string rawQuery = query.Replace(PARAMETER_NAME, string.Empty); 
       string decryptedQuery = Decrypt(rawQuery); 
       context.RewritePath(path, string.Empty, decryptedQuery); 
      } 
      else if (context.Request.HttpMethod == "GET") 
      { 
       // Encrypt the query string and redirects to the encrypted URL. 
       // Remove if you don't want all query strings to be encrypted automatically. 
       string encryptedQuery = Encrypt(query); 
       context.Response.Redirect(path + encryptedQuery); 
      } 
     } 
    } 
    catch (ThreadAbortException) 
    { 
     //do nothing. let it pass 
    } 
    catch (Exception exc) 
    { 
     ReportError(exc); 
    } 
} 

나는 POST 메서드에 대한 캐치 경우 또한 퍼팅 시도했다.

누군가가 아이디어를 가지고 있거나 HttpContext가 포스트 백인지 확인하는 방법이 있는지 알고 있습니까?

+4

이것은별로 유용하지 않습니다. plaintext querystring은 여전히 ​​명확한 선 아래로 내려갈 것입니다. 뭐가 두려운거야? _ 왜 쿼리 문자열에 중요한 정보가 있습니까? – SLaks

+0

쿼리 문자열 암호화는 유용하지 않습니다. 대신 Session 및/또는 SSL을 사용하십시오. –

+0

민감한 데이터는 아니기 때문에 더 많은 사람들이 질의 문자열을 직접 수정하려고하지 않습니다. – Nugs

답변

6

쿼리 문자열에 중요한 데이터를 보내는 것은 좋은 생각이 아닙니다. 전체 querystring을 암호화하는 대신 querystring을 작성하기 전에 데이터를 암호화하는 것이 좋습니다. 또한 사용자가 쿼리 문자열을 변경하여 사이트가 손상되지 않아야합니다. URI는 사용자가 가고자하는 곳으로 사용자를 이동 시키므로 쿼리 문자열 (URI)을 변경하여 탐색하면 웹 표준이됩니다. 웹은 RestFul이어야합니다.

+0

+1에 대한 ReSTful ... –

관련 문제