1.开启magic_quotes_gpc防止SQL注入SQL注入是一个非常危险的问题。轻则网站后台被入侵,重则整个服务器宕机,需谨慎。php.ini中有个设置:magic_quotes_gpc=Off,默认是关闭的。如果开启,它会自动将用户提交的查询转换为sql,比如将'转换为\'等,这对防止sql注入有很大的作用。所以我们推荐设置为:magic_quotes_gpc=On(10)错误信息控制一般php在没有连接数据库或者其他情况下都会提示错误。一般报错信息会包含php脚本当前路径信息或查询SQL语句等信息,此类信息提供给黑客后是不安全的,所以一般服务器建议关闭报错提示:display_errors=Off如果要显示错误信息,必须设置错误显示的级别,比如只显示警告上面的信息:error_reporting=E_WARNING&E_ERROR当然,我还是建议关闭错误提示。(11)错误日志,建议关闭display_errors后记录错误信息,以便查找服务器运行的原因:log_errors=On同时设置错误日志存放目录。建议根apache日志一起存在:error_log=D:/usr/local/apache2/logs/php_error.log注意:该文件必须允许apache用户和组有写权限。新建用户如mysqlstartnetusermysqlstartfuckmicrosoft/addnetlocalgroupusersmysqlstart/del不属于任何组。如果MYSQL安装在d:\mysql,那么给mysqlstart完全控制权限,在系统服务,MYSQL服务属性中设置,在登录属性中,选择用户mysqlstart并输入密码,确定。重启MYSQL服务,MYSQL就会以低权限运行。如果Apache是??在Windows平台下构建的,我们就需要注意了。Apache默认以系统权限运行,这很可怕,让人感觉很不舒服。然后让我们降低Apache的权限。netuserapachefuckmicrosoft/addnetlocalgroupusersapache/delok.我们创建了一个不属于任何组的用户apche。我们打开计算机管理器,选择服务,点击apache服务的属性,我们选择登录,选择这个账户,我们填写上面创建的账户和密码,重启apache服务,ok,apache在低权限下运行.其实我们还可以设置各个文件夹的权限,让apache用户只能执行我们希望它能够执行的操作,为每个目录单独创建一个可以读写的用户。这也是很多虚拟主机提供商流行的配置方式,不过为了防止有点矫枉过正,就用这种方式。2虽然国内很多PHP程序员还在依赖addslashes来防止SQL注入,但是还是建议大家加强对中文的检查来防止SQL注入。addslashes的问题在于黑客可以使用0xbf27代替单引号,而addslashes只是将0xbf27改为0xbf5c27成为有效的多字节字符,而0xbf5c仍会被视为单引号,因此无法成功拦截addslashes。当然addslashes也不是没用,用于单字节字符串处理,多字节字符还是用mysql_real_escape_string}else{$lastname=$_POST['lastname'];}最好在magic_quotes_gpc已经打开时检查$_POST['lastname']。先说下mysql_real_escape_string和mysql_escape_string这两个函数的区别:mysql_real_escape_string必须在(PHP4>=4.3.0,PHP5)的情况下使用。否则,只能使用mysql_escape_string。两者的区别在于:mysql_real_escape_string考虑了连接的当前字符集,而mysql_escape_string则没有。总结一下:*addslashes()就是强行加上\;*mysql_real_escape_string()会判断字符集,但对PHP版本有要求;*mysql_escape_string不考虑连接的当前字符集。
