1

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

无论如何..所以情况就是这样

我有一个从用户那里获取输入的系统。但是查询中没有使用任何输入(根本没有)。此输入包含大量代码片段。现在过去我转义了输入,然后将其存储在数据库中。我不使用任何类型的添加和剥离斜杠功能,而是使用我自己的使用 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注入是没有问题的。

4

2 回答 2

12

在您真正要显示数据之前,切勿对数据进行编码以进行显示。存储时编码存储,传输时编码传输等。在适当的时间进行适当的编码将为您处理这些问题。

于 2012-07-23T21:00:55.457 回答
0

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

于 2012-07-23T21:03:05.083 回答