【发布时间】:2012-07-23 20:59:06
【问题描述】:
我的大部分问题本质上都是理论性的,因为我认为“伟大的头脑讨论想法”而职员讨论语法。
无论如何.. 情况就是这样
我有一个从用户获取输入的系统。但查询中没有使用任何输入(根本没有)。这个输入包含很多代码sn-ps。现在过去我转义了输入,然后将其存储在数据库中。我不使用任何类型的添加和剥离斜杠功能,而是使用我自己的使用 preg_replace 的程序,如下所示
$data = preg_replace("/\;/", ";", $data);//
$data = preg_replace("/</", "<", $data);
$data = preg_replace("/>/", ">", $data);
$data = preg_replace("/\"/", """,$data);
$data = preg_replace("/\(/", "(", $data);
但是出现了以下问题。
有时软件会错误地转义数据(因为我的软件不是没有错误的),我无法找到实际数据是什么。 我不时更新我的转义程序,这意味着不同的输入以不同的方式转义。
用户可以选择编辑他的帖子。因此这意味着我必须向他展示转义数据(或取消转义数据)以防止两次转义数据...... 所以最后我得出的结论是,我将未转义的数据从用户直接保存到数据库中。并在显示之前将其转义(它没有其他用途……在查询等中没有用处)。对于其他任何事情,我都没有更改原始数据。
我的问题::
即使未在查询中使用或在显示前转义,数据库中未转义的用户数据仍然很危险吗???
用斜线转义是否等于/更好/不同于通过将字符转义例如
如果数据被正确转义(我的意思是所有特殊字符),它仍然可以用于 XSS 攻击。 SQL 注入是不可能的。
【问题讨论】: