php - 在不转义的情况下将用户数据存储在数据库中

标签 php mysql

我的大部分问题本质上都是理论性的,因为我认为“伟人讨论想法”而文员讨论语法。

无论如何..情况是这样

我有一个从用户那里获取输入的系统。但这些输入都没有用于查询(根本)。此输入包含大量代码片段。现在过去我转义输入然后将其存储在数据库中。我不使用任何类型的添加和删除斜杠函数,而是使用我自己的程序,这些程序使用 preg_replace,如下所示

$data = preg_replace("/\;/", "&#59;", $data);//
$data = preg_replace("/</", "&lt;",   $data);
$data = preg_replace("/>/", "&gt;",   $data);
$data = preg_replace("/\"/", "&quot;",$data);
$data = preg_replace("/\(/", "&#40;", $data);

但是出现了以下问题。

有时软件会错误地转义数据(因为我的软件不是没有错误),我将无法找到实际数据是什么。 我会不时更新我的​​转义程序,这意味着不同的输入会以不同的方式转义。

用户可以选择编辑他的帖子。因此这意味着我必须向他展示转义数据(或取消转义数据)以防止转义数据两次...... 所以最后我得出的结论是我将未转义的数据从用户直接保存到数据库中。并在 Display 之前转义它(它没有其他目的.. 在查询等中没有用)。对于其他任何事情,我都有未更改的原始数据。

我的问题::

即使未在查询中使用或在显示前转义,数据库中未转义的用户数据是否仍然是危险的???

用斜杠转义是否等于/更好/不同于通过将字符转义,例如 < 变成 <..

如果数据被正确转义(我的意思是所有特殊字符)它仍然可以用于 XSS 攻击。 SQL 注入(inject)是不可能的。

最佳答案

永远不要编码显示数据,直到您真正要显示它。存储时,为存储而编码,传输时,为传输而编码等等。在适当的时间进行适当的编码将为您解决这些问题。

关于php - 在不转义的情况下将用户数据存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11620422/

相关文章:

php - 如何使 "<f:form.select>"成为必填字段(必填)?

php - 如何在 PHP 中向 DateTime() 对象添加一分钟?

php - 如何在 SOAP 请求的curl header 中添加ConfigurationName

mysql - 很长的SQL Query,能不能优化一下

php - 从数据库中检索行以获取建议

php - 直引号到弯引号

php - 传递商店购物车数据...Ajax 还是 PHP Post?

mysql - 从 MySQL 中的列表字符串中获取单个项目

php - Memcached奇怪的问题!

mysql - Concrete5 SQLSTATE[HY000] [2002] 本地主机上没有这样的文件或目录