【问题标题】:Can I "unsanitize" during a PDO SELECT?我可以在 PDO SELECT 期间“取消消毒”吗?
【发布时间】:2017-10-28 02:55:57
【问题描述】:

我正在编写客户端和服务器端代码。用户在浏览器中输入数据,发送到服务器上我的 PHP 代码。

我在$_GET[] 上使用filter_input_array,在“名称”字段中使用FILTER_SANITIZE_STRING

O'Reilly 变为 O'Reilly,并存储在数据库中。

当然,下次客户端获取数据并在浏览器中显示时,用户会抱怨。

当我SELECT 使用 PDO 来自 MySql 数据库的数据时,有什么方法可以“取消清理”?

【问题讨论】:

  • 正确的做法是将数据正确地存储在数据库中,而不是用错误的方式编码。可能使用FILTER_FLAG_NO_ENCODE_QUOTES 会有所帮助
  • 如果您使用准备好的语句并绑定值,则首先不需要进行清理。
  • @SamiKuhmonen 有效,请随时将其发布为答案,我会接受。 Nigel,当我查看代码时,我发现 both 正在清理输入 绑定 d/b查询参数!也许我需要重新思考和重构?
  • 如果您可以“试一试”并注释掉您的 filter_input_array,看看它是如何工作的 - 正确理解这些事情如何影响您的网站及其使用的数据总是有用的。
  • 你是对的,当然。而且,由于我绑定了我的查询参数,所以我不需要清理(它只是我用来验证 URL 中是否存在强制 $_GET[] 参数的一部分。我不知道清理是如何进入的)

标签: php mysql pdo sanitization


【解决方案1】:

在数据库中保存数据时,正确的方法是按使用时存储数据,即 ' 按原样存储。那么在数据显示的时候就不需要对数据做任何事情了。

您可以使用FILTER_FLAG_NO_ENCODE_QUOTES 标志来禁用字符串中" 或' 的编码。如果您只想摆脱HTML 标记,您也可以使用strip_tags() 函数来代替该值。

您总是希望在查询中使用参数,因为这有助于解决 SQL 注入问题,但是您是否要剥离标签、清理输入或其他内容取决于您要对数据执行的操作。所以有时你只使用参数,有时也进行清理。

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多