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 相关文章推荐
Apache设置虚拟WEB
Oct 09 PHP
php,不用COM,生成excel文件
Oct 09 PHP
php上传、管理照片示例
Oct 09 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
PHP学习之数组值的操作
Apr 17 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
php使用event扩展的io复用测试的示例
Oct 20 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
PHP session会话的安全性分析
2011/09/08 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
php array_map()函数实例用法
2021/03/03 PHP
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python 接口_从协议到抽象基类详解
2017/08/24 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
python实现粒子群算法
2020/10/15 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
婚礼主持结束词
2014/03/13 职场文书
基督教婚礼主持词
2014/03/14 职场文书
销售口号大全
2014/06/11 职场文书
立志成才演讲稿
2014/09/04 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
2014年财政工作总结
2014/12/10 职场文书
个人廉洁自律总结
2015/03/06 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
python全面解析接口返回数据
2022/02/12 Python
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技