提交后重新填写表单而无法操作代码

Refill form after submit without able to manipulate the code

通常我使用这样的代码来处理表单。其中的 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>

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

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

防止这种情况的最佳方法是什么?仅搜索并删除 >" 等特殊字符就足够了吗?还是有更好更优雅的方式?

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

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