1.字符串操作
(1)对于输入的字符串来说,某些字符肯定是有效的。但是对于我们黑客来说,就是要往里面输入一些具有特殊功能的字符。但是PHP为了防止用户输入的数据具有某个功能,提供了转义字符串函数。这些转义字符串函数将字符串转义就是在她们前面加上一个反斜杠。例如,“(双引号)就边成了/“(反斜杠双引号);/(反斜杠)就变成了//(反斜杠反斜杠)。这个规则对所有的特殊字符都通用,所以如果在字符串中存在//字符,就需要用进进行替换,而实现这个功能的函数就是addslshes(),它的使用方法如:$name= addslshes($name);
和许多字符串函数一样,addslshes()函数需要一个字符串作为输入参数,经过处理,将返回一个重新格式化后的字符串。也正是因为有了这个函数的出现,PHP的安全性得到了很大的提高,如果程序中使用了这个函数对用户输入的字符串进行处理了,那么我们几乎是不可能进行入侵了,这个函数可谓是黑客的天敌啊!而还有一个函数stripslashes()的功能就是去掉这些斜杠的,功能和addslshes()是相反的。
而在php.ini中还有一个叫做magic_quotes_gpc配置指令。如果它启用了的话,也就是说magic_quotes_gpc=true的话那么它就会实现addslshes()和stripslashes()这两个函数的功能。如今,在PHP的新版本中的默认情况下,该指令是启用的,这也使得新版的PHP安全性得到了很大的提高。gpc表示GET、POST和cookie,这就意味着来自这些方法和方式的变量将自动包括在引号内。使用magic_quotes_gpc()函数可以检查系统上的指令是否已经启用。
2.使用PHP从Web访问MySQL数据库
在任何用于从WEB访问数据库的脚本中,都应该遵循下面的基本步骤:
1) 检查并过滤来自用户的数据。
2) 建立一个到适当数据库的连接。
3) 对数据库进行各种操作,如查询操作。
4) 获取操作数据库的结果。
5) 将结果现实给用户。
而我们分析代码找漏洞最重要的就是第一步,寻找代码中那些数据系统没有过滤或过滤不完全,只要出现了没有过滤或过滤不完全的话,八成就会出现了安全问题,也就找到了一个漏洞了。
前面我已经给大家介绍了magic_quotes_gpc指令及addslshes()和stripslashes()这两个函数。如果一个安全意识比较高的程序员,他一般都会利用他们来过滤用户输入的数据,常见的过滤代码如下:
if (!magic_quotes_gpc())
{
$id = addslshes($id);
$name = addslshes($name);
}
前面也已经告诉大家了magic_quotes_gpc()函数就是用来检测magic_quotes_gpc指令是否已经启用了。上面的代码首先是判断magic_quotes_gpc指令是否启用,如果没有启用的话就用addslshes()函数对输入的数据进行转义。如果在一个系统中的所有参数都用这些给转义了,那我们找代码的漏洞几乎是没戏了。