PHP里8个鲜为人知的安全函数分析


Posted in PHP onDecember 09, 2014

本文实例讲述了PHP里8个鲜为人知的安全函数。分享给大家供大家参考。具体分析如下:

安全是编程非常重要的一个方面。在任何一种编程语言中,都提供了许多的函数或者模块来确保程序的安全性。在现代网站应用中,经常要获取来自世界各地用户的输入,但是,我们都知道“永远不能相信那些用户输入的数据”。所以在各种的Web开发语言中,都会提供保证用户输入数据安全的函数。这里我们就来看看,在著名的开源语言PHP中有哪些有用的安全函数。

在PHP中,有些很有用的函数开源非常方便的防止你的网站遭受各种攻击,例如SQL注入攻击,XSS(Cross Site Scripting:跨站脚本)攻击等。一起看看PHP中常用的、可以确保项目安全的函数。注意,这并不是完整的列表,是我觉得对于你的i项目很有的一些函数。

1. mysql_real_escape_string()

这个函数在PHP中防止SQL注入攻击时非常有用。这个函数会对一些例如单引号、双引号、反斜杠等特殊字符添加一个反斜杠以确保在查询这些数据之前,用户提供的输入是干净的。但要注意,你是在连接数据库的前提下使用这个函数。
但是现在已经不推荐使用mysql_real_escape_string()了,所有新的应用应该使用像PDO一样的函数库执行数据库操作,也就是说,我们可以使用现成的语句防止SQL注入攻击。

2. addslashes()

这个函数的原理跟mysql_real_escape_string()相似。但是当在php.ini文件中,“magic_quotes_gpc“的值是“on”的时候,就不要使用这个函数。magic_quotes_gpc 的默认值是on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。你可以使用get_magic_quotes_gpc()函数来确定它是否开启。

3. htmlentities()

这个函数对于过滤用户输入的数据非常有用。它会将一些特殊字符转换为HTML实体。例如,用户输入<时,就会被该函数转化为HTML实体<(<),输入>就被转为实体>.

4. htmlspecialchars()

在HTML中,一些特定字符有特殊的含义,如果要保持字符原来的含义,就应该转换为HTML实体。这个函数会返回转换后的字符串,例如'&' (ampersand) 转为'&'

ps:此处原文有误,在此非常感谢瑾瑜  提出。现已更正,另外附上此函数常见的转换字符:

The translations performed are:
 '&' (ampersand) becomes '&'
 '”' (double quote) becomes '"' when ENT_NOQUOTES is not set.
 “'” (single quote) becomes ''' (or ') only when ENT_QUOTES is set.
 '<' (less than) becomes '<'
 '>' (greater than) becomes '>'

5. strip_tags()

这个函数可以去除字符串中所有的HTML,JavaScript和PHP标签,当然你也可以通过设置该函数的第二个参数,让一些特定的标签出现。

6. md5()

从安全的角度来说,一些开发者在数据库中存储简单的密码的行为并不值得推荐。md5()函数可以产生给定字符串的32个字符的md5散列,而且这个过程不可逆,即你不能从md5()的结果得到原始字符串。
现在这个函数并不被认为是安全的,因为开源的数据库可以反向检查一个散列值的明文。你可以在这里找到一个MD5散列数据库列表

7. sha1()

这个函数与md5()类似,但是它使用了不同的算法来产生40个字符的SHA-1散列(md5产生的是32个字符的散列)。也不要把绝对安全寄托在这个函数上,否则会有意想不到的结果。

8. intval()

先别笑,我知道这个函数和安全没什么关系。intval()函数是将变量转成整数类型,你可以用这个函数让你的PHP代码更安全,特别是当你在解析id,年龄这样的数据时。

此处附上英文原文地址:http://www.pixelstech.net/article/1300722997-Useful-functions-to-provide-secure-PHP-application

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
Feb 19 PHP
php下载文件的代码示例
Jun 29 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
PHP中session变量的销毁
Feb 27 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
深入php内核之php in array
Nov 10 PHP
PHP Mysqli 常用代码集合
Nov 12 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
利用php生成验证码
Feb 23 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 #PHP
两个php日期控制类实例
Dec 09 #PHP
php中Ctype函数用法详解
Dec 09 #PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 #PHP
thinkphp缓存技术详解
Dec 09 #PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 #PHP
php生成shtml类用法实例
Dec 09 #PHP
You might like
header()函数使用说明
2006/11/23 PHP
php获取汉字首字母的函数
2013/11/07 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
Python模块结构与布局操作方法实例分析
2017/07/24 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python 一句话生成字母表的方法
2019/01/02 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
如何现实servlet的单线程模式
2014/08/05 面试题
民主生活会对照检查材料
2014/09/22 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
你需要掌握的20个Python常用技巧
2022/02/28 Python