PHP形式欺骗和验证

时间:2013-03-25 14:20:14

标签: php forms validation sanitization spoofing

我一直在阅读关于表单欺骗的内容,并且无法理解为什么在我们能够确保传递的值得到适当验证时阻止它如此重要?也许我在这里遗漏了一些东西,但这是一个例子:

example.org/form.html:

<form method="post" action="post.php">
    <input type="text" name="content" value="something">
    <input type="submit" name="post" value="Post">
</form>

example.org/post.php:

if (isset($_POST['content']))
{
    $content = filter_var($_POST['content'], FILTER_SANITIZE_STRING);
    //use $content as a sanitized variable, pass it to a database, etc.
}

恶意用户可以简单地将form.html中的输入字段更改为<textarea name="content">something here</textarea>,但这对任何事情有何影响?我们确保从post.php脚本中的字符串中剥离标记。

所以这是我的问题:可以安全地假设,通过适当的输入验证,PHP形式欺骗应该在安全方面几乎没有危险吗?恶意用户还可以使用name="content"属性(除了textarea,select和所有其他标记)传递给脚本,这些属性可以有效地削弱数据库或其他东西?因为如果他们没有别的办法,为什么要使用令牌?

2 个答案:

答案 0 :(得分:2)

如果您在SQL查询(SQL注入)中使用任何$_POST内容,或者直接将输入放入exec(...)调用(不是好的做法),则存在危险,只要您正在清洁输入(验证/擦洗),就没有危险。关键规则是:

  

永远不要相信用户的输入。

答案 1 :(得分:1)

特定表格授予几个攻击向量。

1)sql注入攻击

未经验证的数据可以包含sql代码,可以在整个数据库中修改数据,删除数据或读取数据(取决于应用程序)。

2)跨站点请求伪造(XSRF)

如果您不确定您收到的数据实际来自您的网站(即会话持久令牌),则其他网站可以复制您的网页并充当所有请求的代理。

这样做的原因是,他们可以复制传输的数据。 例如,这可以用于捕鱼。

3)跨站点脚本注入

即使数据本身对您的数据库没有任何损害并且来自您的网站,输入也可以包含javascript,每次在您的网站中显示内容时都会执行该操作。 (通常可以使用警报(1)或类似方法进行测试。)

这可以通过剥离javascript来防止。