Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_encode()是否可以防止SQL注入?_Php_Sql_Json_Sql Injection_Mysql Real Escape String - Fatal编程技术网

Php json_encode()是否可以防止SQL注入?

Php json_encode()是否可以防止SQL注入?,php,sql,json,sql-injection,mysql-real-escape-string,Php,Sql,Json,Sql Injection,Mysql Real Escape String,我注意到函数json\u encode()会自动在“和”值上加反斜杠。我最初是通过在字符串放入数组之前使用mysqli\u real\u escape\u string($con,$value)来防止SQL注入的,然后使用json对其进行编码 由于json\u encode添加了额外的反斜杠,因此有必要使用mysqli\u real\u escape\u string函数?是的,这仍然是必要的。json\u encode将反斜杠添加到json中包含的字符串,但不添加到json本身的控制元素 那么

我注意到函数
json\u encode()
会自动在
值上加反斜杠。我最初是通过在字符串放入数组之前使用
mysqli\u real\u escape\u string($con,$value)
来防止SQL注入的,然后使用json对其进行编码


由于
json\u encode
添加了额外的反斜杠,因此有必要使用
mysqli\u real\u escape\u string
函数?

是的,这仍然是必要的。
json\u encode
将反斜杠添加到json中包含的字符串,但不添加到json本身的控制元素

那么这个,

array( 'key' => 'some "value" here' );
变成:

{"key": "some \"value\" here"}
字符串中仍然有未转义的引号(围绕键和值的引号)。
json\u encode
并不是为了防止SQL注入。它只为json添加斜杠,以便稍后在数据中添加
json\u decode()
时,它知道字符串的开始和停止位置


正如其他人所说,使用准备好的语句。句号。如果你已经在使用mysqli,你没有理由不使用。

如果你正在使用mysqli,只使用准备好的语句,你就完成了。

json_encode
不足以防止XSS或SQL错误的产生。将对象编码为json的行为甚至会增加new引用字符

…但不要使用
mysqli\u real\u escape\u string
,请使用

…通常情况下,您不应该将JSON存储在数据库中。请规范化您的数据以便查询。

JSON\u encode()和mysqli\u real\u escape\u string()都不能防止SQL注入

此外,如果在json编码的值中不使用mysqli_real_escape_string(),则无法将其解码回来

此外,如果在数据库中存储json,则数据库结构是错误的


您使用的表您的数据库就是这样的数组。它们是用来在单元格中存储标量值的。

不,它不是。因为这不是它的目的。我不会说这是重复的,这纯粹是针对
json\u encode()
function这不是建设性的。为了避免转义,总会有人想出各种解决方法,不管是htmlspecialchars、addslashes还是json_encode,就像你的问题一样。根据你的描述(mysqli_real_escape_string和json_encode的顺序非常错误)你似乎也不明白应该如何进行上下文转义。Hence为什么要暗示绑定参数,这使得这一步变得多余。你为什么要避免使用更简单、更理智的方法?这不是重复。可怜的家伙不值得投3票反对票。