使用out Escapeng将用户数据存储在数据库中


Storing user data in database with out Escaping

我的大多数问题本质上都是理论性的,因为我认为"伟大的头脑讨论思想",而职员讨论语法。

无论如何。。的情况是这样的

我有一个接受用户输入的系统。但这些输入都没有用于查询(根本没有)。此输入包含许多代码片段。现在,在过去,我对输入进行了转义,然后将其存储在数据库中。我不使用任何类型的添加和剥离斜杠函数,而是使用我自己的程序,这些程序使用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注入是不可能的。

在实际显示之前,永远不要对数据进行编码。存储时,为存储编码,传输时,为传输编码,等等。在适当的时间进行适当的编码将为您处理这些问题。

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