函数daddslashes源码分析
在根路径下的source/function/function_文件中,我们可以找到函数daddslashes的源码。daddslashes对addslashes函数进行了一些扩展,主要是增加了对数组的支持,并对数组的键进行处理。
addslashes函数与转义字符
addslashes函数返回一个字符串,在某些特定字符前添加反斜线,以满足数据库查询语句等的需要。这些特定字符包括单引号(')、双引号(")、反斜线()和NULL字符。
在PHP 5.4之前,默认情况下,magic_quotes_gpc指令是开启的,实际上所有的GET、POST和COOKIE数据都经过了addslashes()函数的处理。因此,如果已经使用magic_quotes_gpc转义过的字符串再次使用addslashes()函数会导致双层转义。在这种情况下,可以使用get_magic_quotes_gpc()函数进行检测。
daddslashes函数的实现
该函数通过判断参数是否为数组来执行不同的操作。
1. 判断参数是否为数组
使用is_array()函数来判断参数$string是否为数组,如果是数组,则执行if体中的代码。
2. 获取数组的键名
使用array_keys()函数获取数组$string中的所有键名,并将结果保存在变量$keys中。
3. 遍历数组并处理键值
使用foreach循环遍历数组$keys中的每一个键名$key。
在循环体中,首先将键名对应的值赋给变量$val,然后使用unset()函数释放掉数组$string中该键名对应的元素。
接着,使用addslashes()函数对键名进行处理,然后将处理后的键名作为新的键,将之前保存的值$val作为相应的值赋给数组$string。
4. 处理非数组类型的参数
如果参数$string不是数组类型,则直接使用addslashes()函数对其进行处理,并将处理后的结果赋给变量$string。
需要注意的是,这个函数在处理非数组类型的参数时存在一个bug,如果传入参数$stringtrue,函数将返回字符串类型的数字1。
注入漏洞风险与建议
在不做任何处理的情况下,直接将用户输入拼接到SQL语句中保存到数据库,可能会导致SQL注入的安全风险。因此,我不建议这样做。
在开发过程中,为了防止SQL注入攻击,通常会使用一些安全的方法来处理用户输入,比如使用mysql_escape_string函数或者框架提供的防注入机制。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。