【问题标题】:Should I validate/sanitize $_SESSION variables in php?我应该在 php 中验证/清理 $_SESSION 变量吗?
【发布时间】:2013-12-25 18:49:48
【问题描述】:

我正在构建一个测验网站,我在其中存储一些变量 (回答所用的时间,用户等选择了哪个答案选项等)在每个问题之后的$_SESSIONs 中 - 我仅在用户完成测验后将这些统计信息放入数据库中。

我已经实现了一些if 来检查这些$_SESSION 变量是否是数字(is_numeric())。我还验证了长度(strlen())等。

  • 但是有这样做的理由吗?
  • 或者在存储它们之前只需real_escape_string() 就足够了 在 MySQL 中?
  • 另外,如果有很多用户,那不会造成很大的负担 服务器?

【问题讨论】:

  • 如果您对防止 SQL 注入感兴趣,您应该使用带有参数化语句的 PDO 或 mysqli。这样,无论您插入什么,它都不会被评估为 MySQL 代码。
  • 情况是我不只是在谈论 SQL 注入。难道没有其他人可以使用用户传递的变量来攻击我的网站吗?
  • @joe007 是的,就像 XSS。

标签: php mysql session


【解决方案1】:

不,因为您自己设置了它们。

当然,除非您直接从用户输入中推断出它们,在这种情况下,适用于每一位用户输入的完全相同的规则都适用。

$_SESSION 变量没有什么特别之处。当您从用户那里收到用户输入时,您需要对其进行清理 - 无论您是否将其存储在数据库、会话等中。

就像 JPod 建议的那样 - 在执行 SQL 查询时 - 始终使用准备好的查询来减少 SQL 注入。

【讨论】:

  • 是的,但是假设我在 page1 上设置了 $_SESSION 变量,然后在 page2 上读取它。如果我在 page1 上对其进行了清理,而在 page2 上不关心它,那么黑客/破解者可以简单地通过 $_SESSION 将恶意代码/内容直接发送到 page2 使用一些软件?
  • @joe007 前端用户无法直接访问$_SESSION你是把东西放在那里的人。如果您在 之前清理输入并将其放入会话变量中(并且您应该始终这样做)它不会神奇地变得不安全。更一般地说,您应该虔诚地、毫不留情地对您从客户那里得到的所有东西进行消毒——它必须清晰、一致、明确并且在一个地方。应该毫无疑问哪些数据是脏的,哪些数据是干净的。
  • 哦,好吧,我不知道用户不能以某种方式重写 $_SESSION。非常感谢:)
猜你喜欢
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2010-11-18
  • 2015-07-06
  • 2011-11-19
相关资源
最近更新 更多