安全一直是一个在编程语言中非常值得去关注的方面。在任何一种成熟的编程语言中都有合适的办法来保证程序的安全性,在现代的 WEB 开发中,我们常常需要去处理用户的输入。(那么这时候,问题就来了)有一句编程格言是: 千万不要相信用户输入的安全性。所以呢,今天就介绍一些在PHP 中最常用的为你的代码提供安全保护的方法。
在PHP 中有许多方便的函数可以帮助你免于类似于 SQL注入,XSS攻击。现在让我们来看一下这些能够给你的项目增加安全性的函数吧。但是,请注意,这里只是一些常用的函数的列表,也许他们并不全面,但是我相信他们都是对你的项目是非常有帮助的。
mysql_real_escape_string( string sqlQuery ):
●转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集。一个非常有用的函数,可以有效地避免 SQL 注入。
以下字符会被转换:
\x00,\n,\r,\,’,”,\x1a
在执行sql语句之前,对要将执行的sql query 使用该函数处理,会将一些危 险扼杀在摇篮中。
但是现在一般在较为成熟的项目中,一般比较推荐使用类似 PDO 这样的数据库持久层来处理所有的数据库操作。他们代表着更为先进的数据库操作处理技术,在安全性,数据读写的速度上逗比那些古老的 mysql_* api 强大了不少。
addslashes() :
在将一些数据插入到数据库中时,这个函数会非常有用,它可以在单引号前加上反斜杠,使得数据在插入时不会出现错误。但是它的使用与php.ini 中的一项设置有关系 magic_quotes_gpc
1. 对于PHP magic_quotes_gpc=on的情况, 我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于PHP magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
【stripslashes() :删除由 addslashes() 函数添加的反斜杠。】
htmlentities() :
一个非常有用的用来处理输出的函数。它用来将一些可能导致XXS攻击的字符转化为html实体,这些字符在浏览器显示的时候是正常的,但是当你查看它的源代码时,实际上这些特殊字符必不会是他显示的那样,例如
输出:
John |