【问题标题】:PHP escape string for "if" [closed]“if”的PHP转义字符串[关闭]
【发布时间】:2012-12-07 16:40:55
【问题描述】:

我想以一种安全但通用的方式在 PHP 代码中使用字符串变量,如下例所示。我见过 htmlspecialchars() 但我认为这不是我能得到的最好的。并且 mysql 函数绝对不是解决方案(无论如何,不​​推荐使用 mysql_real_escape_string 之类的东西)。

你们认为以下情况的最佳解决方案是什么:

$password = $_POST['password'];
$password_check = $_POST['password_check'];

//make $password and $password_check safe

if($password != $password_check)
{
    $errors[] = 'The two passwords did not match';
}

谢谢

【问题讨论】:

  • mysql_real_escape_string 可能会贬值,但mysqli_real_escape_string 不会。
  • 您是否担心有人会“注入”您的 if 语句!?
  • 为什么? mysqli_() 是外星人的吗?
  • 这段代码没有什么不安全的地方。您只是比较两个值,这样的操作不会注入任何不好的东西。
  • 标题中的“如果”是什么意思?你害怕有人会破解你的 if 语句吗?

标签: php string variables if-statement escaping


【解决方案1】:

我不确定是否需要在这里进行注射,因为除了比较两个发布的值之外,您什么也不做。此时是否对字符串进行了清理,在比较它们的等价性时并没有太大的区别。

当然,如果您随后使用这些值查询数据库,则需要使用 mysqli_real_escape_string 进行转义和/或利用准备好的语句来对抗 SQL 注入。

您可能在此处考虑的另一个卫生问题是,不匹配的密码将被预先填充回表单以进行更正。在这种情况下,您需要对 XSS 攻击进行清理。

【讨论】:

  • 我认为可以输入一些内容,例如:password: 123 != 123 or 321 password_check: 321 但它们确实不起作用,感谢您的回答跨度>
【解决方案2】:

如果mysql_()即将被弃用怎么办? PHP 还有其他选项,例如 mysqli_()PDO

$password = mysqli_real_escape_string($connect, $_POST['password']);
$password_check = mysqli_real_escape_string($connect, $_POST['password_check']);

//make $password and $password_check safe

if($password != $password_check) {
    $errors[] = 'The two passwords did not match';
}

mysqli_() Reference

【讨论】:

  • 问题不在于 MySQL 数据库。您应该只转义您在数据库查询中使用的变量,其他一切都是无用的(甚至是危险的)
  • @knittl -1 真的吗?你甚至读过这个问题吗?
  • 是的,我已经仔细阅读了问题和您的答案。
  • 实际上这与 mysql 数据库无关。对于我的数据库,我使用 pdo prepare 来保证它的安全。无论如何感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多