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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
使用PHP批量生成随机用户名
Jul 10 PHP
php 操作excel文件的方法小结
Dec 31 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
深入浅析php json 格式控制
Dec 24 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
关于php开启错误提示的总结
Sep 24 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
50个PHP程序性能优化的方法
2014/06/02 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
php生成RSS订阅的方法
2015/02/13 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
python访问抓取网页常用命令总结
2017/04/11 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
使用python实现knn算法
2017/12/20 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
如何利用Python识别图片中的文字
2020/05/31 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
公司培训心得体会
2014/01/03 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python