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模板技术原理【一】
Jan 10 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
php curl基本操作详解
Jul 23 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
示例详解Laravel的注册重构
Aug 14 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
PHP 验证码的实现代码
2011/07/17 PHP
基于php 随机数的深入理解
2013/06/05 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
js验证上传图片的方法
2015/05/12 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
vue axios 简单封装以及思考
2018/10/09 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
解决python删除文件的权限错误问题
2018/04/24 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
网站设计师的岗位职责
2013/11/21 职场文书
童装店创业计划书
2014/01/09 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
2015年财务部工作总结
2015/04/10 职场文书
投资申请报告
2015/05/19 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
React 高阶组件HOC用法归纳
2021/06/13 Javascript
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers