2

我一直在阅读有关表单欺骗的内容,只是无法理解为什么当我们可以确保正确验证传递的值时防止它如此重要?也许我在这里遗漏了一些东西,但这里有一个例子:

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 和所有其他标签)向脚本传递什么可以有效地削弱数据库或其他东西?因为如果他们无能为力,为什么还要使用代币?

4

2 回答 2

2

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

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

于 2013-03-25T14:22:47.467 回答
1

特定的表单授予多个攻击向量。

1)sql注入攻击

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

2)跨站请求伪造(XSRF)

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

这样做的原因是,他们可以制作传输数据的副本。例如,这可以用于钓鱼。

3)跨站脚本注入

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

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

于 2013-03-25T14:30:37.293 回答