php - 在数据库中存储带撇号的值

标签 php mysql security

将可能包含撇号的用户输入插入数据库的行业标准是什么?这样的输入将在网页上显示给用户。例如,用户将某些字段更新为“我很酷”。我用这个函数将它插入到我的数据库中:

public function updateDatabase($value) {
   $value = mysql_real_escape_string($value);
   Database::instance()->query(
      'UPDATE myTable
       SET myColumn = ' . $value . '
       WHERE foo = "bar"'
   );
}

数据库现在将存储“我很酷”。要正确并安全地向任何用户显示此值,我必须使用此功能清理它:

public function toSafeDisplay($userGeneratedValue) {
   return stripslashes(
      htmlentities(
         $userGeneratedValue
      )   
   );
}

我担心的是做 stripslasheshtmlentities我想在网页上显示的所有内容都将占用大量处理器资源。 StackOverflow 上的普遍共识是在插入数据库之前不要执行 htmlentities 操作,以便数据尽可能原始。这将使它以后可以在任何媒体上显示,而不仅仅是网站。所以我们被迫在显示时执行htmlentitiesstripslashes 也是如此吗?或者是否可以在不引入 SQL 注入(inject)攻击的情况下在更新数据库之前删除撇号之前的所有斜杠?。

最佳答案

这根本不是它的工作原理。如果您在将其读回 php 时将进入插入/更新的撇号转义,则它将不会被转义。如果您希望从数据库中获取 HTML 安全数据,那么在将其放入数据库之前确保其安全。

关于php - 在数据库中存储带撇号的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604824/

相关文章:

php - php中的密码/登录系统

c# - 在代码或存储过程中验证密码

php - 如何在Codeigniter中上传图像并将其保存到数据库?

php - 当另一个表中的值发生更改时更新表中列的值

php - sphinx 匹配模式

php - 时间戳查询未检索到结果?

javascript - PHP:Json 获取个人数据

php - 在 laravel blade Laravel 5.5 中找到许多列的总值

php - 在数据库中存储考试数据的最佳方法

api - 如何有效地使用 API key 和 token 方案来保护 REST API?