【问题标题】:PHP form spoofing and validationPHP 表单欺骗和验证
【发布时间】:2013-03-15 01:53:13
【问题描述】:

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

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 中的输入字段更改为,例如,&lt;textarea name="content"&gt;something here&lt;/textarea&gt;,但这会产生什么影响呢?我们确保无论如何都会从 post.php 脚本中的字符串中删除标签。

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

【问题讨论】:

  • 我知道 CSRF 攻击,但是,我仍然觉得很难掌握 如何 它会引起关注?为什么适当的验证和清理还不够?

标签: php forms validation sanitization spoofing


【解决方案1】:

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

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

【讨论】:

  • 我正在使用 PDO 连接数据库(prepare()、execute()、占位符)以防止 SQL 注入。还有什么需要注意的吗?
  • SQL 注入和意外代码执行是我试图防范的两大威胁。
  • 所以基本上,确保传递给脚本的 anything 被正确转义应该足以防止表单欺骗的危险?因为在涉及到令牌并确保表单由正确的用户提交时,各个网站都非常重视它。
  • 令牌可用于防止您描述的伪造,但此时保护的是真正的会话劫持......提交表单以及一些附加信息(会话ID)以使其看起来像是由合法用户提交的。只能使用令牌/安全会话架构来防止这种情况。对于网络上 99.99% 的表单来说,这并不是一个真正的问题。
【解决方案2】:

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

1) sql注入攻击

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

2) 跨站请求伪造 (XSRF)

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

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

3) 跨站脚本注入

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

这可以通过剥离 javascript 来避免。

【讨论】:

  • 所以我想唯一的问题是 CSRF 攻击,因为我正确地转义了数据,并确保我的所有查询都使用 PDO 不会发生 SQL 注入。
  • 对于这个小例子,是的。有更多的攻击向量,这些攻击向量的预防更加复杂。一个例子就是中间人,攻击者会在你的表单发送给用户的途中改变你的表单。这可以通过 https 来防止,并且是 pci dss 的要求。但是我没有在我的帖子中提到这一点,因为它对于一个小型应用程序来说有点过头了。
  • 我正在为博客开发自己的 CMS,但我真的不认为我可以使用 https,所以我认为这样的安全措施在我的项目中有点超出范围.
  • 是的,我就是这个意思。没有 https 应该没问题。
猜你喜欢
  • 2019-06-05
  • 2013-04-27
  • 2013-06-29
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多