【问题标题】:Validation and Sanitization of International Names国际名称的验证和清理
【发布时间】:2019-12-07 06:12:29
【问题描述】:

我遇到了这个answer,,它暗示,除了检查字符串是否为空之外,我们最好根本不进行验证。考虑到the scope of possible characters when dealing with international names,,这似乎是合理的。

我们应该完全放弃验证吗?

在清理国际名称时,准备好的语句是否足够?

$pdo = $connection->prepare("INSERT INTO clicks (domain, sid) VALUES (:domain, :sid)");
$pdo->execute(array(
  ":domain" => $domain,
  ":sid" => $sid
));

另一种方法是禁止某些字符,而不是尝试匹配包含的字符。然而,这也会变得棘手。

【问题讨论】:

  • 对否决票的解释会很有用...
  • 如果您将输入值正确绑定到准备好的语句(看起来像这样),那么值中允许的字符与 SQL 注入问题并不真正相关,因为它不可能要成为查询一部分的值。 stackoverflow.com/questions/8263371/…
  • @Don'tPanic 好的。

标签: php regex validation pcre sanitization


【解决方案1】:

我们应该完全放弃验证吗?

大概吧。我同意链接用户的回答。试图猜测名字只会让你痛苦。

在清理国际名称时,准备好的语句是否足够?

如果操作正确,是的。请注意,仅使用准备好的语句是不够的,您还需要使用绑定参数。

我想这就是你的意思,但我觉得我需要在这里学究气,因为我经常看到这种“准备好的陈述”:

$db->prepare("select * from users where id = $id");

【讨论】:

  • 我使用的是$pdo = $connection->prepare("INSERT INTO table (column) VALUES (:column),然后单独绑定它们(例如$pdo->bindParam(":column", $column))或将它们作为关联数组执行(例如$pdo->execute(array(":column" => $column))这些准备好的语句是否足以清理国际名称?
  • @csabinho 我在上面的评论中准备的声明是否足以清理国际名称?
  • @csabinho 对,这正是我的观点。我经常看到这种情况,人们认为仅使用prepare() 就可以使他们安全。我只是想指出你也需要绑定。
  • @BugWhisperer 没有看到所有代码就无法判断,但是,是的,您的基本概念是正确的。
  • 我添加了代码。您还需要查看哪些其他代码才能知道准备好的语句是否足以对国际名称进行清理?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
相关资源
最近更新 更多