【问题标题】:Refill form after submit without able to manipulate the code提交后重新填写表单而无法操作代码
【发布时间】:2017-02-02 13:42:49
【问题描述】:

通常我在表单中使用这样的代码。其中的 PHP 代码用于重新填写表单,例如如果缺少某些东西:

<form action="" method="post">
    <input type="text" name="first_name" <?php if (isset($_POST['first_name'])) { echo "value=\"".$_POST['first_name']."\"";} ?>><br>
    <input type="text" name="last_name" <?php if (isset($_POST['last_name'])) { echo "value=\"".$_POST['last_name']."\"";} ?>><br>
    <input type="submit" name="submit">
</form>

一个安全工具刚刚告诉我,如果填充例如,黑客可以操纵我的代码。 "&gt;&lt;p&gt;Hello!!!&lt;/p&gt; 然后提交。黑客是否也可以操纵 PHP 代码或仅操纵 HTML?

这是一个很大的安全问题吗?

防止这种情况的最佳方法是什么?仅搜索删除特殊字符(如&gt;")就足够了吗?还是有更好、更优雅的方式?

【问题讨论】:

    标签: php html forms security html-manipulation


    【解决方案1】:

    是的,这是一个严重的问题。这是一种 XSS 攻击。攻击者可以通过这种方式注入恶意脚本。 https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

    为了避免这种攻击,你应该转义 HTML 标签。这是一个 PHP 库:http://php.net/manual/en/function.htmlspecialchars.php

    【讨论】:

    • 谢谢。在等待这个问题的答案时,我有了这个想法:&lt;input type="text" name="name" &lt;?php if (isset($_POST['name'])) { echo "value=\"".str_replace(array('&lt;','&gt;','"','\'','/'), array('','','','',''), $_POST['name'])."\"";} ?&gt;&gt;。你觉得有道理吗?
    • 我不是 PHP 专家,但我猜您正试图以这种方式删除标签。如果它适合您的场景,这不是一个坏主意,但是使用库可能是更好的解决方案,以防万一您遗漏了某些东西(例如,库还涵盖了您的代码未涵盖的“&”符号)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多