制作安全性高的PHP网站的几个实用要点


Posted in PHP onDecember 30, 2014

大家都知道PHP已经是当前最流行的Web应用编程语言了。但是也与其他脚本语言一样,PHP也有几个很危险的安全漏洞。所以在这篇教学文章中,我们将大致看看几个实用的技巧来让你避免一些常见的PHP安全问题。

技巧1:使用合适的错误报告

一般在开发过程中,很多程序员总是忘了制作程序错误报告,这是极大的错误,因为恰当的错误报告不仅仅是最好的调试工具,也是极佳的安全漏洞检测工具,这能让你把应用真正上线前尽可能找出你将会遇到的问题。
当然也有很多方式去启用错误报告。比如在 php.in 配置文件中你可以设置在运行时启用

启动错误报告
error_reporting(E_ALL);

停用错误报告
error_reporting(0);

技巧2:不使用PHP的Weak属性

有几个PHP的属性是需要被设置为OFF的。一般它们都存在于PHP4里面,而在PHP5中是不推荐使用的。尤其最后在PHP6里面,这些属性都被移除了。

注册全局变量
当 register_globals 被设置为ON时,就相当于设置Environment,GET,POST,COOKIE或者Server变量都定义为全局变量。此时你根本不需要去写 $_POST[‘username']来获取表单变量'username',只需要'$username'就能获取此变量了。
那么你肯定在想既然设置 register_globals 为 ON 有这么方便的好处,那为什么不要使用呢?因为如果你这样做将会带来很多安全性的问题,而且也可能与局部变量名称相冲突。
比如先看看下面的代码:

if( !empty( $_POST[‘username'] ) && $_POST[‘username'] == ‘test123′ && !empty( $_POST[‘password'] ) && $_POST[‘password'] == “pass123″ )

{

$access = true;

}

如果运行期间, register_globals 被设置为ON,那么用户只需要传输 access=1 在一句查询字符串中就能获取到PHP脚本运行的任何东西了。
在.htaccess中停用全局变量

php_flag register_globals 0

在php.ini中停用全局变量

register_globals = Off

停用类似 magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase 这些Magic Quotes
在.htaccess文件中设置

php_flag magic_quotes_gpc 0

php_flag magic_quotes_runtime 0

在php.ini中设置

magic_quotes_gpc = Off

magic_quotes_runtime = Off

magic_quotes_sybase = Off

技巧3:验证用户输入

你当然也可以验证用户的输入,首先必须知道你期望用户输入的数据类型。这样就能在浏览器端做好防御用户恶意攻击你的准备。

技巧4:避免用户进行交叉站点脚本攻击

在Web应用中,都是简单地接受用户输入表单然后反馈结果。在接受用户输入时,如果允许HTML格式输入将是非常危险的事情,因为这也就允许了JavaScript以不可预料的方式侵入后直接执行。哪怕只要有一个这样漏洞,cookie数据都可能被盗取进而导致用户的账户被盗取。

技巧5:预防SQL注入攻击

PHP基本没有提供任何工具来保护你的数据库,所以当你连接数据库时,你可以使用下面这个mysqli_real_escape_string 函数。

$username = mysqli_real_escape_string( $GET[‘username'] );

mysql_query( “SELECT * FROM tbl_employee WHERE username = '”.$username.“‘”);

好了,在这篇简短的文章中,我们阐述了几个开发过程中不能忽视的PHP安全性问题。但是最终是否使用,如何使用还是开发人员来决定的。希望这篇文章能帮助到你们。

PHP 相关文章推荐
php中目录,文件操作详谈
Mar 19 PHP
附件名前加网站名
Mar 23 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
php生成高清缩略图实例详解
Dec 07 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 PHP
phpStorm2020 注册码
Sep 17 PHP
php读取mssql的ntext字段返回值为空的解决方法
Dec 30 #PHP
php实现Linux服务器木马排查及加固功能
Dec 29 #PHP
php连接oracle数据库及查询数据的方法
Dec 29 #PHP
php查询mssql出现乱码的解决方法
Dec 29 #PHP
php+mysql大量用户登录解决方案分析
Dec 29 #PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 #PHP
php操作mongoDB实例分析
Dec 29 #PHP
You might like
用PHP实现维护文件代码
2007/06/14 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python读写docx文件的方法
2018/05/08 Python
Python延时操作实现方法示例
2018/08/14 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
简单租房协议书
2014/04/09 职场文书
工作分析计划书
2014/04/30 职场文书
食品流通安全承诺书
2014/05/22 职场文书
教代会开幕词
2015/01/28 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
单位计划生育责任书
2015/05/09 职场文书
雷锋的观后感
2015/06/10 职场文书
五一晚会主持词
2015/07/01 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis