문제

QueryString을 통해 Base64 문자열을 C#.NET 웹 응용 프로그램으로 전달하려고합니다. 문자열이 도착하면 "+"(플러스) 부호가 공간으로 대체됩니다. 자동 URLDECODE 프로세스가이를 수행하는 것으로 보입니다. 쿼리 스트링을 통해 전달되는 것을 통제 할 수 없습니다. 이 서버 측면을 처리 할 수있는 방법이 있습니까?

예시:

http://localhost:3399/Base64.aspx?VLTrap=VkxUcmFwIHNldCB0byAiRkRTQT8+PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

생산 :

VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

사람들은 QueryString을 UrlenCoding을 제안했습니다.

System.Web.HttpUtility.UrlEncode(yourString) 

통화 루틴을 통제 할 수 없으므로 (다른 언어와 잘 어울립니다) 그렇게 할 수 없습니다.

공백을 플러스 부호로 교체한다는 제안도있었습니다.

Request.QueryString["VLTrap"].Replace(" ", "+");

나는 이것에 대해 있었지만 그것에 대한 나의 관심사를 가지고 있었고, 이것을 시작하기 위해 이것을 언급 했어야했을 것입니다. 다른 플러스 부호 외에 문자가 기형 될 수 있습니다.

저의 주요 목표는 쿼리 스트링이 디코더를 통과하기 전에 가로 채는 것입니다.

이를 위해 request.querystring.toString ()을 보려고 시도했지만 동일한 기형 정보가 포함되어 있습니다. RAW QueryString을 볼 방법이 있습니까? ~ 전에 urldecoded?

추가 테스트 후 .NET은 쿼스트에서 나오는 모든 것이 URL 인코딩 될 것으로 예상하지만 브라우저는 자동으로 URL 인코딩 된 요청이 없습니다.

도움이 되었습니까?

해결책

값을 수동으로 교체 할 수 있습니다 (argument.Replace(' ', '+')) 또는 상담하십시오 HttpRequest.ServerVariables["QUERY_STRING"] (httprequest.url.query를 더 잘하고 직접 구문 분석하십시오.

그러나 URL이 주어진 문제를 해결하려고 노력해야합니다. 플러스 부호는 URL에서 "%2b"로 인코딩되어야합니다. 플러스는 공간을 나타내므로 플러스가 필요합니다.

인바운드 URL을 제어하지 않으면 이런 식으로 가장 많은 오류를 피하기 때문에 첫 번째 옵션이 선호됩니다.

다른 팁

제안 된 솔루션 :

Request.QueryString["VLTrap"].Replace(" ", "+");

잘 작동해야합니다. 당신의 우려에 관해서 :

나는 이것에 대한 것이었지만 그것에 대한 나의 관심사를 가지고 있었고, 이것을 시작하기 위해 이것을 언급 했어야한다.

이것은 완화하기 쉽습니다 베이스에 대한 읽기 64. 현대 Base64에서 합법적 인 유일한 비 영화 문자는 "/", "+"및 "="(패딩에만 사용됨)입니다.

그 중 "+"는 URL에서 탈출 된 표현으로 특별한 의미를 가진 유일한 것입니다. 다른 두 사람은 URL (Path Delimiter 및 Query String Separator)에서 특별한 의미를 지니고 있지만 문제를 제기해서는 안됩니다.

그래서 나는 당신이 괜찮을 것이라고 생각합니다.

내 URL을 제어한다는 것을 제외하고는 정확히 같은 문제가 있습니다. 조차도 Server.URLDecode 그리고 Server.URLEncode 다시 변환하지 않습니다 + 내 쿼리 문자열이 다음과 같이 보이지만 서명합니다.

http://localhost/childapp/default.aspx?TokenID=0XU%2fKUTLau%2bnSWR7%2b5Z7DbZrhKZMyeqStyTPonw1OdI%3d

다음을 수행 할 때.

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);

여전히 변환하지 않습니다 %2b 다시 a + 징후. 대신 다음을 수행해야합니다.

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);
tokenID = tokenID.Replace(" ", "+");

그런 다음 올바르게 작동합니다. 정말 이상합니다.

Base64 값이 포함 된 매개 변수와 '+'와 관련하여 비슷한 문제가있었습니다. request.querystring [ "vltrap"]. replare ( "", "+"); 나를 위해 잘 일했습니다. '%2B'로 인코딩 된 '+'로 직접 인코딩 된 링크를 표시하더라도 처음에는 '+'로 변경하는 브라우저이기 때문에 UrlenCode 또는 기타 인코딩 도움말이 없습니다. 빈 공간으로. 따라서 링크를 보여 주더라도 원래 포스터가 말하는 것처럼 제어 할 수있는 방법은 없습니다. HTML 이메일에서도 그러한 링크와 동일합니다.

문자열을 URL에 추가하기 전에 URLENCODE를 사용하면 해당 문제가 없습니다 (자동 URLDECODE는 원래 상태로 반환합니다).

글쎄, 분명히 서버로 보내기 전에 Base64 문자열이 UrlenCoded를 가져야합니다.
당신이 그것을 달성 할 수 없다면, 나는 단순히 내장 된 공간을 다시 +로 교체하는 것이 좋습니다. B64 줄은 공간을 갖지 못하기 때문에 합법적 인 전술입니다 ...

System.Web.HttpUtility.UrlEncode(yourString) 트릭을 할 것입니다.

빠른 해킹으로 Base64 디코딩 전에 공간을 플러스 문자로 바꿀 수 있습니다.

사용하는 경우 System.Uri.UnescapeDataString(yourString) 그것은 무시할 것입니다 +. 이 방법은 문자열이 클라이언트 또는 서버에서 일종의 레거시 접근법을 사용하여 인코딩 된 경우에만 사용해야합니다.

이 블로그 게시물을 참조하십시오.http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatring-in-url-decoding.aspx

나는 결코 C# 개발자가 아니지만 URL로 보내기 전에 Base64 문자열을 인코딩 해야하는 것 같습니다.

공간이 A +라고 가정하고 교체 할 수 없습니까?

Request.QueryString["VLTrap"].Replace(" ", "+");

;)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top