$ _POST表单高级安全性

时间:2019-03-21 08:28:28

标签: php html

我想问一下如何从试图编辑输入名称的黑客那里获取我的表格?我的意思是...我想问的是以下内容:

<form action="?page=forumpost&action=posttopic">
    <input type="hidden" name="parrentID" value="1">
    <input type="text" name="post_name">
    <input type="submit">
</form>

您看到那个表格了吗?假设我打开了检查元素选项,然后决定更改

<input name="">

当我在编辑输入名称后单击“提交”按钮时,我将被重定向到处理表单的另一页?page=forumpost&action=posttopic。当然,我得到一个PHP错误“ 未定义索引:post_name ”。服务器正在搜索post_name,而不是一个空白名称发送到服务器,导致该错误。这是引发错误的代码。

if($_GET['action'] === "posttopic"){
    posttopic($_POST['parrentID'],$_POST['postname']);
}


function posttopic($parrentID,$postname){
    // Form code here
}

如何防止这种情况发生?当然,我正在使用准备好的语句htmlspecialchars()stripslashes()strip_tags(),并另外检查输入的最小/最大长度。但这并不能阻止用户使我的服务器抛出错误。我可以禁用这些错误,但是我没有找到一个好的解决方案。我们欢迎一些有关表单的安全提示。用户还可以通过某种方式利用假表格或其他方式以某种方式入侵我的网站吗??

1 个答案:

答案 0 :(得分:1)

在处理数据之前,只需检查所有值是否已设置。

if (isset($_GET['action'], $_POST['parrentID'], $_POST['postname']) && $_GET['action'] === "posttopic") {
    posttopic($_POST['parrentID'], $_POST['postname']);
}

此外,您提到使用htmlspecialchars()stripslashes()strip_tags()-您知道这些功能在做什么吗?您可能会以意想不到的方式处理数据。

  • htmlspecialchars()仅应在 output 而不是输入上调用。使用该功能将值存储在数据库中将使搜索成为噩梦。将干净的文本存储在数据库中,而在网站上打印文本时执行echo htmlspecialchars($myValue);
  • 如果您使用的是预备语句,则不需要
  • stripslashes()(如果您不使用预备的语句,则该函数“可以帮助”(可选,请转义输入))。只需保留准备好的语句并放弃此功能即可。
  • strip_tags()剥离HTML标记,该标记很有用-取决于您的方法,但是如果您在输出上使用htmlspecialchars()(再次输入,请不要输入!) ,这是多余的。