2012-07-23 118 views
1

我的大多数问题都是理论性的,因为我认为“伟大的思想家讨论想法”和职员讨论语法。将用户数据存储在数据库中无需转义

不管怎么说..所以这里的情况是

我有采取从user.BUT没有该输入的输入查询(全部)使用的系统。这个输入包含很多代码片段。现在在过去,我逃过了输入,然后将其存储在数据库中。我不使用任何添加和剥离斜线功能排序,而使用它们使用的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); 

发生然而下面的问题我自己的程序。

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

用户可以选择编辑他的帖子。这意味着我必须向他呈现转义数据(或不转义数据)以防止数据泄漏两次...... 因此,我终于得出结论,我直接从用户保存未转义的数据进入数据库。并在显示之前将其转义(它没有其他目的..在查询中没有用处等)。对于其他任何事情我都有原始数据未更改。

我的问题::

可以取消逃脱数据库中的用户数据仍然是危险的,即使在查询中不使用或显示之前逃脱???

与斜线相等/更好/比换款字符。例如:<到<逃逸不同逃逸..

如果数据正确地转义(我的意思是所有的特殊字符),那么它还可以用于XSS攻击。 SQL注入是没有问题的。

回答

12

从不编码显示数据直到你真的要显示它。当存储,编码存储,传输时,编码传输等。在适当的时间适当的编码将为您处理这些问题。

+0

这么简短,但这样一个伟大的答案。 +1 – drew010 2012-07-23 21:02:00

+2

我还会添加“永远不要写你自己的转义函数”。 – Vatev 2012-07-23 21:07:25

+0

ohh ...亚做出这么多的意义..你可以plz指示我去一些地方阅读更多关于...什么是显示编码...什么是存储编码....谢谢 – 2012-07-23 21:27:38

0

是的,它可能是危险的。用户可以轻松注入代码来在数据库上运行自己的查询(即使您不打算查询此数据)。

相关问题