2009-05-11 2 views
1

특정 서버에 문제가 있습니다. 응용 프로그램에 게시 된 모든 더하기 기호는 공백으로 대체됩니다. POST 및 GET과 해당 사이트의 모든 페이지에 있습니다. 테스트 케이스로
나는이 작은 페이지 (그것이 ASP 서버의)이 있습니다% 2B 대신에 공백으로 디코딩

<html> 
<body> 
    <form method="post"> 
    <input type="text" name="Plus" id="Plus" /> 
    <input type="submit" /> 
    </form> 
    Previous Value: <%= request("Plus") %><br /> 
    Query String: <%= request.querystring %> 
</body> 
</html> 

이 잘 작동 다른 모든 서버에서,하지만 하나의 서버 흑자 공백으로 대체됩니다.
예 : "1 2+3"- 요청 ("Plus")은 "1 2 3"이고 검색어 문자열은 "1+2+3"입니다. 좋지 않다. 다른 문자가 올바르게 디코딩되는 것 같습니다.
누군가가 공격으로부터이 서버를 '강화'하려고 했으므로 IIS 옵션이 켜져있을 수 있습니다 (ISAPI 필터를 제거했지만).
감사합니다.


UPDATE : 그것은 설치된 다른 필터, http://www.codeplex.com/IIS6SQLInjection에서 SQL 주입 필터 ISAPIClipSQLInjection.dll 거기 밝혀졌습니다.
필터는 버그입니다 - POST에서 유효한 문자를 대체하고 GET : 더하기 기호가 공백으로 대체된다

  1. 을 "1 % 2B2"-> "1 + 2"동일한 "1 2"
  2. 세미콜론은 쉼표로 바뀝니다. "hello;" -> "hello,"

최신 버전의 필터 (2.0b)는이 문제를 해결하지 못하지만 특정 페이지를 제외 할 수 있습니다. 프로덕션 환경에 설치 되었기 때문에 필터를 제거하지 않기로 결정했습니다. 자바 스크립트를 사용하여 모든 플러스 값을 "&#43 " (공백과 세미콜론이 아닌)으로 변경했습니다.
최적의 솔루션은 아니지만 보스가 원했던 것입니다.

답변

1

아스키 코드를 고려하십시오. 더하기 기호 대신 ascii 코드를 사용하십시오. chr (43)이됩니다. ASP와 SQL 모두 이해할 수 있습니다.

여기에 모든 ASCII 코드가있는 표가 있습니다. http://www.asciitable.com/

+0

훌륭한 솔루션은 아니지만 작동합니다. 그 작은 패치가 우리가 결국 한 일이기 때문에 나는 당신의 해결책을 받아 들일 것입니다. 어쨌든 고마워. – Kobi

+0

너무 개인적인 것을 얻지는 않지만 이스라엘에 살고있는 것으로 나타났습니다. 살아있는 한 그것이 어찌 그곳에 있습니까? 우리 미디어가 그려 놓은 것만 큼 나쁜 것일까 요? 나는 문화와 사람들을 사랑하기 때문에 곧 나가고 싶습니다. – Eric

+0

큰 재미이지만, 이것에 관해서는 이야기 할 곳이 거의 없습니다. 어떤 식 으로든 저에게 연락 주시기 바랍니다 (내 블로그에는 몇 개의 링크가 있습니다) – Kobi