4

テキストエリアを介して入力を受け取る単純な base64 デコーダー フォームを作成しました。入力はbase64でエンコードされていると思います。base64入力じゃなくて、PHPエラーとかガベージが返ってきたら今のところは気にならないんだけど、セキュリティの観点から、この入力に対してバリデーションやサニテーションは必要なの?

このページは error-decoder.php と呼ばれ、それ自体に送信され、データベースなどとは対話しません。ここにすべてがあります:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <div id="container" style="width: 80%; margin: 0 auto; font-family: sans-serif;">

            <form name="error-decoder" action="error-decoder.php" method="post">
                <textarea name="error-text-area" style="width: 100%; height: 400px;">
                    <?php if(!empty($_POST['error-text-area'])){ echo $_POST['error-text-area']; } ?>
                </textarea>
                <button type="submit" style="float: right;">Decode</button>
            </form>

            <?php
            if(!empty($_POST['error-text-area'])){
            ?>
                <p>Output:</p>
                <hr>
                <div id="error-output">
                <br />
            <?php
                echo base64_decode($_POST['error-text-area']) . "</div>";
            }
            ?>

        </div>

    </body>
</html>

ユーザーまたはサーバーにとってこれを安全にするために必要なことはありますか? あなたの答えに影響を与えることを心配する必要がある重要な php.ini 設定はありますか? セキュリティにどのように影響するかを除いて、エラーやゴミは気にしません。これに関する情報をありがとう!

4

3 に答える 3

4

html に出力する場合htmlspecialchars()、データが html を壊さないように使用する必要があります。もちろん、html自体を出力している場合を除きます。

そう:

echo htmlspecialchars(base64_decode($_POST['error-text-area']));
于 2012-10-03T21:14:27.620 に答える
2

POST を使用しているため、クロスサイト スクリプティングはできませんが、ローカルの HTML/スクリプト インジェクション可能です。唯一のセキュリティ ホールは、ユーザーが自分自身を撃つことです。base64 でエンコードされた悪意のある HTML/JS を送信すると、悪意のあるページにリダイレクトされる可能性があります。したがって、デコード関数の出力をサニタイズします。

于 2012-10-03T21:14:18.507 に答える
0

はい。その出力は HTML 表示に使用されるため、HTML としてエンコードする必要があります。単純なパススルーはhtmlentities()その問題を解決します。

実際の脆弱性は、誰かが<script>タグまたは同様の危険なタグをページに挿入し、ページに影響を与える可能性があることです.

于 2012-10-03T21:13:55.200 に答える