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