小编Bil*_*riq的帖子

在没有转义的情况下将用户数据存储在数据库中

我的大多数问题都是理论性的,因为我认为"伟大的思想讨论思想"和职员讨论语法.

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

我有一个系统从用户那里获取输入.但是在查询中根本没有使用该输入(根本没有).此输入包含许多代码段.现在在过去我转义了输入,然后将其存储在数据库中.我不使用任何类型的添加和剥离斜杠函数,而是使用我自己的程序,使用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);
Run Code Online (Sandbox Code Playgroud)

但是发生了以下问题.

有时软件会错误地逃避数据(因为我的软件没有错误),我无法找到实际数据.我不时更新我的​​转义程序,这意味着不同的输入被转义不同.

用户可以选择编辑他的帖子.因此,这意味着我必须向他提供转义数据(或取消数据)以防止数据转发两次......最后我得出的结论是,我将来自用户的未转义数据直接保存到数据库.并在显示之前将其转义(它没有其他用途..在查询等中没有用).对于任何其他事情我没有改变原始数据.

我的问题::

即使在查询中没有使用或在显示之前转义,数据库中未转义的用户数据仍然是危险的???

正在使用斜杠等于/更好/不同而不是通过追逐字符来逃避,例如<into <..

如果数据被正确转义(我的意思是所有特殊字符),它仍然可以用于XSS攻击.SQL注入是不可能的.

php mysql

1
推荐指数
1
解决办法
128
查看次数

标签 统计

mysql ×1

php ×1