4

我制作了一个简单的 base64 解码器表单,它通过 textarea 接收输入。我假设输入是 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 回答