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相关资料
Oct 09 PHP
如何在PHP程序中防止盗链
Apr 09 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
nginx+thinkphp下解决不支持pathinfo模式
Jul 01 PHP
非常重要的php正则表达式详解
Jan 04 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
学习使用Bootstrap栅格系统
2017/05/11 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
Python Socket编程入门教程
2014/07/11 Python
python制作一个桌面便签软件
2015/08/09 Python
python2.7的编码问题与解决方法
2016/10/04 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
python实现爬山算法的思路详解
2019/04/09 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
迎八一活动主题
2014/01/31 职场文书
四年级下册教学反思
2014/02/01 职场文书
优秀经理获奖感言
2014/03/04 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
平安家庭事迹材料
2014/12/20 职场文书
小学生暑假安全公约
2015/07/14 职场文书
初中运动会前导词
2015/07/20 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
python垃圾回收机制原理分析
2022/04/13 Python
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android