2011-02-01 3 views
7

으로 이어졌습니다. 이전에 결코 만난 적이없는 문제가 있으며, 아파치 구성과 관련이 있다고 생각합니다.apache : 쿼리 문자열 (URL)의 이스케이프 처리 된 움라우트가 403

먼저 검색 양식이있는 PHP 스크립트가 있습니다. 양식은 POST를 통해 전송됩니다.

검색 결과 목록이 있습니다. 여기에 원래 검색 쿼리가 URL의 일부로 전달됩니다 (예 : search.php? id = 1234 & query = foo). 이것은 또한 작동합니다 - 한 움라우트 (äöüÄÖÜß ...) 문자가 전송되지 않는 한.

가 최대한 빨리 검색 쿼리, POST 작품으로 쿼리 문자열을 전달하는 첫 번째 부분에서 움라우트가 포함되어 있지만 URL에 (를 urlencoded)을 통과으로 그래서 403

에 이르게 :

  • search.php?id=1234&query=bar
  • search.php?id=1234&query=b%E4r 403 (% E4 = "A"UTF-8를 urlencoded)
  • search.php?id=1234&query=b%C3%A4r 403 리드 리드 동작 (%의 C3 %의 A4 = "A"를 UTF-8를 urlencoded)
  • POST를 통해 움라우트 제출하기

나는 애플 리케이션을 iso-8859-1에서 utf-8로 변환했으나 아무런 차이가 없었다.

로컬 컴퓨터에서도 테스트를 거쳤습니다. 예상대로 완벽하게 작동합니다.

원격 서버 설정 (작동하지 않는 경우) :

아파치/2.2.12 (우분투),
PHP 버전 5.2.10-2ubuntu6.7, 수호신 패치 0.9.7을 통해 CGI

지역 설정 (여기에 같은 작품)/FastCGI를 :

아파치/2.2.8 (Win32에서) PHP/5.3.5
PHP 버전 5 .3.5 mod_php를 통해

누구도 원격 아파치/PHP-CGI가 urlencoded 움라우트를 URL에서 허용하지 않는 이유를 알고 있습니까?

추가 정보 : 나는 또한 이름에 움라우트가 포함 된 정적 파일을 만들려고 시도했으며 모두 /t%C3%A4st.php/täst.php이 문제없이 처리됩니다. täst.php?foo=täst이 실패합니다.

참고 : % 28 "("이다 ?foo=%28도 작동

+0

pedantic, 나도 알아,하지만 "ß"는 움라우트가 없다 ... – Stephen

+0

죄송합니다 :)이 특별한 종류의 특별한 문자는 어떻게 불려지나요? – stefs

+2

깨진 규칙이있는 mod_security와 유사한 모듈이 있습니까? 이 또한 같은 다른 ascii 문자로 발생합니까? – arnaud576875

답변

1
아파치가 탈출하지 않습니다

브라우저가하는

당신은 urlencode를 사용할 필요가

urldecode 그 문제를 피하기 위해.. 문자의 종류

예전 넷스케이프와 같은 일부 브라우저는 8 비트 문자로 작성된 URL을 전송합니다.다른 사람들, 특히 MSIE는 url을 웹 서버에 보내기 전에 UTF-8로 인코딩하므로 8 비트 문자가 두 번째 문자로 도착합니다. 첫 번째 문자는 8 번째 비트로 설정됩니다. 요청 헤더 나 다른 곳에서 url이 UTF-8로 인코딩되었다는 표시는 없습니다.

+0

나는 그것을 알고있다. 하지만 URL에 특정 문자가있는 경우 일부 아파치 구성/mis-configured 보안 모드를 요청을 차단할 것으로 판단됩니다. – stefs

+0

다른 문제는 PHP에서 자동으로 수행되기로되어 있습니다. 문제가 발생하지 않아야합니다. 403으로 서브 쿼리하면 아파치가되어야하고, PHP에 들어가면 오류가 500, 403 일 것입니다. 말은 아파치가 아파치 서버에 설치되는 규칙 인 문자열을 가져 오는 것과 같이 파일을로드하지 못한다는 것입니다. –

관련 문제