모든 쿼리 스트링을 암호화하고 해독하는 훌륭한 작은 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가 포스트 백인지 확인하는 방법이 있는지 알고 있습니까?
이것은별로 유용하지 않습니다. plaintext querystring은 여전히 명확한 선 아래로 내려갈 것입니다. 뭐가 두려운거야? _ 왜 쿼리 문자열에 중요한 정보가 있습니까? – SLaks
쿼리 문자열 암호화는 유용하지 않습니다. 대신 Session 및/또는 SSL을 사용하십시오. –
민감한 데이터는 아니기 때문에 더 많은 사람들이 질의 문자열을 직접 수정하려고하지 않습니다. – Nugs