ajax を GET として使用して php ファイルに送信している URL で、「Altar」または「altar」という単語の後にスペースを入れると、403 エラーが発生します。それは教会の場所なので、もちろん彼らはこの言葉を使うつもりです.
パラメータでその単語を使用するまで、コードは完全に正常に機能します。たとえば、これは、内部の URL と特殊文字、および一重引用符を使用しても、完全に正常に機能します。
ad2calendar.php?ajax=1&u=testuser&d=2013-11-30&s=1&iurl=altar.jpg&eEvent=%3Ca%20href%3D'someurl.com'%20title%3D%22Phony%20URL%22%20%3EA%20Phony% 20URL%3C%2Fa%3E%0ASome%20special%20chars%20!%40%26%5E%25%23%24(%23%40%22%22¬es=test&eTitle=Test&y=2013&m=11
しかし、これには「Altar」という単語とスペースが含まれているため、403 になります。
ad2calendar.php?ajax=1&u=testuser&d=2013-11-30&s=1&iurl=&eEvent=Altar%20¬es=test&eTitle=Test&y=2013&m=11
このような単純な単語が URL を壊して 403 を引き起こす理由について何か考えはありますか?
私自身のトラブルシューティングで、403 が、php ファイルが存在するディレクトリよりも上位のディレクトリからのものであることを発見しました (php はパスワードで保護されたディレクトリにあります)。最近ファイルを UTF-8 に変更したため、これは文字エンコードの問題が原因である可能性があると考えていますが、それ以外の場合は問題なく動作するようです。空白の .htaccess ファイルで試したので、フォーム フィールドで encodeURIComponent を使用して mod_rewrites はありません。スクリプトは、この文字の組み合わせをチェックしてリダイレクトすることは決してありません。
私はphpの厳密なエラーレポートをオンにしていますが、phpエラーもjavascriptエラーもスローされません。403ページはそのディレクトリの場所にないリソースを使用するため、ajax応答のために、結果divに表示されている403ページに関連する唯一のエラーが発生すると思われます。
コード自体はかなり複雑なので、すべてのビットを投稿することはできません。さらにトラブルシューティングするための指示を探しています。正直なところ、私はすぐにこの単語のためだけにハックを入れるつもりです.
さらに奇妙なことに、1 か月か 2 か月前にこの単語を使用できましたが、コードをその時点までロールバックすると、エラーが解決しません。
私の Raw Access Logs から、最初に「Altar」が含まれており、200 が返され、2 番目に「Altar」が含まれ、末尾にスペースがあり、403 が返されます。
XXX.XXX.XXX.XXX - - [11/Nov/2013:12:35:22 -0500] "GET /ad2calendar.php?ajax=1&u=testuser&d=2013-11-30&s=0&iurl=&eEvent=Altar¬es=&eTitle=&y=2013&m=11 HTTP/1.1" 200 20102 "http://XXXXX/ad2events.php" "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16"
XXX.XXX.XXX.XXX - - [11/Nov/2013:12:35:29 -0500] "GET /ad2calendar.php?ajax=1&u=testuser&d=2013-11-30&s=1&iurl=&eEvent=Altar%20¬es=&eTitle=&y=2013&m=11 HTTP/1.1" 403 1098 "http://XXXXX/ad2events.php" "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16"
山括弧内のテキスト「スクリプト」も 403 を与えることがわかりました。例:
<script > alert("I am Bad"); </script >
上記は403エラーです。これにより、これを引き起こしているセキュリティ機能またはエンコードの問題があることが確認されます。