mysql插入json自动转义

mysql插入json自动转义,第1张

mysql插入json自动转义方法,通过json_encode后的数据写入Mysql数据库时,mysql对会json_encode值里面有中文的unicode反斜杠进行转义,这是在数据库层的转义。

转义字符的意思(十进制)\贝尔(BEL)007 \ b退格(BS)008 \ f换页(FF)012 \ n换行(LF)010 \ r回车符的ASCII码值(CR)013 \ t水平标签(HT)009 \ v垂直制表(VT)011 \\反斜杠092 \?问号字符063 \'单引号字符039 \“双引号字符034 \ 0空字符(NULL)000 \ DDD任意字符三位八进制\ XHH任何两个十六进制字符

SQL注入是一种非常常见的数据库攻击手段,同时也是网络世界中最普遍的漏洞之一,简单理解就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。

问题来源是,SQL数据库的 *** 作是通过SQL语句来执行的,而无论是执行代码还是数据项都必须写在SQL语句中,也就导致如果我们在数据项中加入了某些SQL语句关键字,比如SELECT、DROP等,这些关键字就很有可能在数据库写入或读取数据时得到执行。

解决方案

方案一:

采用预编译技术

使用预编译的SQL语句,SQL语句的语义不会是不会发生改变的。预编译语句在创建的时候就已经将指定的SQL语句发送给了DBMS,完成了解析,检查,编译等工作,所以攻击者无法改变SQL语句的结构,只是把值赋给?,然后将?这个变量传给SQL语句。当然还有一些通过预编译绕过某些安全防护的 *** 作,大家感兴趣可以去搜索一下。

方案二:

严格控制数据类型

在java、c等强类型语言中一般是不存在数字型注入的,因为在接受到用户输入id时,代码一般会做一个int id 的数据类型转换,假如我们输入的是字符串的话,那么这种情况下,程序就会报错。但是在PHP、ASP这些没有强调处理数据类型的语言,一般我们看到的接收id的代码都是如下等代码。

方案三:

对特殊的字符进行转义

数字型注入可以通过检查数据类型防止,但是字符型不可以,那么怎么办呢,最好的办法就是对特殊的字符进行转义了。比如在MySQL中我们可以对" '

"进行转义,这样就防止了一些恶意攻击者来闭合语句。当然我们也可以通过一些安全函数来转义特殊字符。如addslashes()等,但是这些函数并非一劳永逸,攻击者还可以通过一些特殊的方式绕过。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8706686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存