在只与自身交互的PHP Web表单中,哪些验证很重要?

时间:2012-10-03 21:10:25

标签: php base64 security

我制作了一个简单的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设置我需要担心这会影响你的答案?我不关心错误或垃圾,除了它可能会影响安全性。感谢您的任何信息!

3 个答案:

答案 0 :(得分:4)

当您输出到html时,您应该使用htmlspecialchars()来避免数据破坏html。除非你当然输出html本身。

所以:

echo htmlspecialchars(base64_decode($_POST['error-text-area']));

答案 1 :(得分:2)

您正在使用POST,因此无法进行跨站点脚本编写,但本地HTML /脚本注入可能。唯一的安全漏洞是用户在脚下射击自己:如果他们提交base64编码的恶意HTML / JS,他们可能最终将自己重定向到恶意页面。因此,清理解码函数的输出。

答案 2 :(得分:0)

是。由于该输出用于HTML查看,因此需要将其编码为HTML。通过htmlentities()进行简单的传递可以解决这个问题。

实际的漏洞是有人可能会向您的网页注入<script>标签或类似的危险标签,并会影响该网页。