防止sql注入相关函数addslashes,htmlspecialchars ,mysqli_real_escape_string分析与区别

一.addslashes作为防止sql注入函数分析 转义单引号,双引号,反斜线,null

1.首先对于含有单引号双引号的表单字符,如果不加反斜线转义,直接拼凑sql可能报错,如表单为xiao'ping,拼凑select * form user where name='xiao'ping',可见该表单中的单引号会被视为字符串的定界符,从而报语法错误。正确的是假addslashes之后的结果select * form user where name='xiao'ping'

2.防止sql注入,即通过输入:$_GET['name'] = 's" or 1=1 #'   来构造 'select * from first where name = "s" or 1=1 #" ' 从而实现恶意用户获取用户数据的非法目的。

3.addslashes进行转义的单引号,双引号,反斜线和null,这些转义的斜杠,本身不插入到数据库,即转义后,在数据库存储的仍然是xiao'ping,而不是xiao\'ping,因此以后取出数据的时候,无需进行stripslashes()函数进行反转义。比较方便。

4.特殊情况 对于输入的如 xiaoming\nxiaoli,因为对反斜杠进行转义,转义后xiaoming\\nxiaoli,最终存储的仍然是原来输入的xiaoming\nxiaoli字符

二.htmlspecialchars 作为防止sql注入函数分析 实体单引号(需要加参数ENT_QUOTES),双引号,大于,小于,&符号

1.类似于分析addslashes,单引号和双引号必须处理,使用htmlspecialchars 处理后也可以避免出现类似的引号被作为字符串定界符解析从而造成语法错误的问题。

2.防止sql注入,即通过输入:$_GET['name'] = 's" or 1=1 #'   来构造 'select * from first where name = "s" or 1=1 #" ' 从而实现恶意用户获取用户数据的非法目的。

3.对于htmlspecialchars 处理的单引号,双引号,等存储到数据库中的字符是转为字符实体后的字符,如xiao'ping, 存储到数据库中用navicate查看到的值是xiao'ping,因此当你从数据库取出字符串的时候,还需要做html_entity_decode反实体处理,相比较addslashes复杂些。

三.mysqli_real_escape_string作为防止sql注入分析  会被进行转义的字符包括: NUL (ASCII 0),\n,\r,\,'," 和 Control-Z.

1.首先对于含有单引号双引号的表单字符,如果不加反斜线转义,直接拼凑sql可能报错,如表单为xiao'ping,拼凑select * form user where name='xiao'ping',可见该表单中的单引号会被视为字符串的定界符,从而报语法错误。正确的是假addslashes之后的结果select * form user where name='xiao'ping'

2.防止sql注入,即通过输入:$_GET['name'] = 's" or 1=1 #'   来构造 'select * from first where name = "s" or 1=1 #" ' 从而实现恶意用户获取用户数据的非法目的。

3.addslashes进行转义的单引号,双引号,反斜线和null,这些转义的斜杠,本身不插入到数据库,即转义后,在数据库存储的仍然是xiao'ping,而不是xiao\'ping,因此以后取出数据的时候,无需进行stripslashes()函数进行反转义。比较方便。

4.特殊情况 对于输入的如 xiaoming\nxiaoli,因为对反斜杠进行转义,转义后xiaoming\\nxiaoli,最终存储的仍然是原来输入的xiaoming\nxiaoli字符。其实mysqli_real_escape_string对\r,\n,\的转义,与addslashes的对\的转义效果一样。

 


欢迎加我们微信wang1415035017进入微信高级技术群共同进步,或者扫码加入我们哦(V_V) 

 

 

 

 

 

你可能感兴趣的:(php,软件开发)