我的大多数问题都是理论性的,因为我认为“伟大的思想讨论思想”,而职员讨论语法。
无论如何..所以这是情况
我有一个系统从用户那里获取输入。但是在查询中根本没有使用该输入(根本没有)。此输入包含许多代码段。现在在过去我转义了输入,然后将其存储在数据库中。我不使用任何类型的添加和剥离斜杠函数,而是使用我自己的程序,使用preg_replace,如下所示
$data = preg_replace("/\;/", ";", $data);//
$data = preg_replace("/</", "<", $data);
$data = preg_replace("/>/", ">", $data);
$data = preg_replace("/\"/", """,$data);
$data = preg_replace("/\(/", "(", $data);
但是发生了以下问题。
有时软件会错误地逃避数据(因为我的软件没有错误),我无法找到实际数据。 我不时更新我的转义程序,这意味着不同的输入会以不同方式转义。
用户可以选择编辑他的帖子。因此,这意味着我必须向他提供转义数据(或取消数据),以防止数据转发两次...... 最后我得出结论,我将未转义的数据从用户直接保存到数据库中。并在显示之前将其转义(它没有其他用途..在查询等中没有用)。对于任何其他事情我没有改变原始数据。
我的问题::
即使未在查询中使用或在显示之前进行转义,数据库中未转义的用户数据仍然存在危险吗???
使用斜线等于/更好/不同的斜线逃逸,而不是通过追逐字符来逃避,例如&lt;进入&lt; ..
如果数据被正确转义(我的意思是所有特殊字符),它仍然可以用于XSS攻击。 SQL注入是不可能的。
答案 0 :(得分:12)
从不对显示的数据进行编码,直到您实际要显示它。存储时,存储编码,传输时编码,传输编码等。适当的编码将适合您处理这些问题。
答案 1 :(得分:0)
是的,它可能很危险。用户可以轻松地注入代码以在数据库上运行自己的查询(即使您不打算查询此数据)。