0

管理者がバックエンドに一括割引バウチャー コードを挿入できる小さなアプリケーションを開発しています。フロントエンドでは、サイト訪問者はこれらのコードを 1 つずつ取得できます。バックエンドにバウチャー コードを挿入するために、管理者がそれらを一度に挿入できる Textarea を提供しています。固有のバウチャー コード"XXXXXX-XXX-XXX-wGet"を取得するまで、すべてが正常に機能していました。

POST メソッドを使用して送信される単純な HTML フォームがあります。このバウチャー コードを送信すると、ブラウザから「501-メソッドが実装されていません」というエラーが返されます。問題は、コード内の「wGet」キーワードにあります。wget が Linux コマンドであることは知っていますが、ここでは POST でテキストとして送信しています。サーバーから 501 エラーが送信されました。私はたくさんグーグルで検索しましたが、運がありませんでした。フォームを送信する前に、この "wGet" キーワードをエスケープするにはどうすればよいですか?

編集:

<?php
if($_REQUEST){
    echo '<pre>';
    print_r($_REQUEST);
    echo '</pre>';
}
?>
<html>
    <head>
        <title>Wget Demo</title>
    </head>
    <body>
        <form name="frmCodes" method="POST">
            <textarea name="voucher_codes"></textarea>
            <input type="submit" name="btnSubmit"/>
        </form>
    </body>
</html>
4

1 に答える 1

6

マリオのコメントは正しいと思います。おそらくmod_securityです。

デフォルトの動作はPOSTデータのスキャンです(/etc/httpd/conf/modsecurity.confを参照)

SecFilterScanPOST On

wgetがブロックされた

# WEB-ATTACKS wget command attempt
SecFilter "wget\x20"

このSecFilterの前に#を付けてコメントアウトし(またはSecFilterScanPOSTをOffに設定して)、apacheを再起動して解決するかどうかを確認します。

または、以下を含む対応するディレクトリの.htaccessファイルを使用します。

<IfModule mod_security.c>
# Turn the filtering engine On or Off or DynamicOnly for cgi/php/etc
SecFilterEngine On

# Should mod_security inspect POST payloads
SecFilterScanPOST Off

# this rule allows wget but logs it so you can verify it if necessary
SecFilter "wget\x20" "log,pass"
</ifModule>

両方のオプションを入れて、ある程度試してみることができます。サイト固有にすることも可能ですが、mod_securityルールについて少し読む必要があります。

わずかな編集:wgetを許可するが、ログルールを.htaccessに追加しました。これにより、SecFilterScanPOSTをオンにすることができます。

于 2012-05-30T11:51:51.517 に答える