整理一些PHP开发安全问题
整理一些PHP开发安全问题
简单介绍
当开发一个互联网服务的时候,必须时刻牢记安全观念,并在开发的代码中体现。PHP脚本语言对安全问题并不关心,特别是对大多数没有经验的开发人员来说。
每当你讲不论什么涉及到钱財事务等交易问题时,须要特别注意安全问题的考虑,比如开发一个论坛或者是一个购物车等。
安全保护一般性要点
不相信表单
对于一般的Javascript前台验证,因为无法得知用户的行为。比如关闭了浏览器的javascript引擎,这样通过POST恶意数据到server。
须要在server端进行验证,对每一个php脚本验证传递到的数据,防止XSS攻击和SQL注入
不相信用户
要如果你的站点接收的每一条数据都是存在恶意代码的。存在隐藏的威胁,要对每一条数据都进行清理
关闭全局变量
在php.ini文件里进行下面配置:
register_globals = Off
假设这个配置选项打开之后,会出现非常大的安全隐患。比如有一个process.php的脚本文件。会将接收到的数据插入到数据库,接收用户输入数据的表单可能例如以下:
<input name="username" type="text" size="15" maxlength="64">
这样。当提交数据到process.php之后,php会注冊一个$username变量,将这个变量数据提交到process.php。同一时候对于不论什么POST或GET请求參数,都会设置这种变量。假设不是显示进行初始化那么就会出现以下的问题(參考:http://www.lai18.com/content/434606.html)
<? php
// Define $authorized = true only if user is authenticated
if (authenticated_user()) {
$authorized = true;
}
? >
此处,如果authenticated_user函数就是推断$authorized变量的值,如果开启了register_globals配置,那么不论什么用户都能够发送一个请求。来设置$authorized变量的值为随意值从而就能绕过这个验证。
全部的这些提交数据都应该通过PHP提前定义内置的全局数组来获取,包含$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等,当中$_REQUEST是一个$_GET/$_POST/$_COOKIE三个数组的联合变量。默认的顺序是$_COOKIE、$_POST、$_GET。
推荐的安全配置选项
error_reporting设置为Off:不要暴露错误信息给用户,开发的时候能够设置为ON
safe_mode设置为Off
register_globals设置为Off
将下面函数禁用:system、exec、passthru、shell_exec、proc_open、popen
open_basedir设置为 /tmp ,这样能够让session信息有存储权限,同一时候设置单独的站点根文件夹
expose_php设置为Off
allow_url_fopen设置为Off
allow_url_include设置为Off
SQL注入攻击
对于操作数据库的SQL语句。须要特别注意安全性,由于用户可能输入特定语句使得原有的SQL语句改变了功能。类似以下的样例:
扩展阅读
PHP安全编程系列收藏夹收藏了有关PHP安全编程方面的知识,对PHP安全编程提供学习參考
19PHP安全编程:cookie暴露导致session被劫持
44php防止sql注入演示样例分析和几种常见攻击正則表達式
52PHP安全之以Apache模式安装时可能遇到的攻击及解决的方法
最新文章
- ASP.NET MVC之从控制器传递数据到视图四种方式(一)
- android 如何结束一个线程
- Dijkstra最短路径算法实例
- Windows系统使用putty远程连接DigitalOcean创建的Linux系统(CentOS6.7为例)
- hdu 4568 Hunter(spfa预处理 + 状压dp)
- python学习道路(day2note)(数据类型,运算符,字符串,列表)
- 【Unity3D游戏开发】之游戏目录结构之最佳实践和优化 (十一)
- [Linux] Ubuntu Server 12.04 LTS 平台上搭建WordPress(Nginx+MySql+PHP) Part II
- 【线性结构上的动态规划】UVa 11400 - Lighting System Design
- 利用systemtap学习Linux路由代码
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
- Eclipse+Java+OpenCV246人脸识别
- HDU 1171 Big Event in HDU (多重背包)
- IIS服务器如何抗住高并发的客户端访问
- JVM基础系列开篇:为什么要学虚拟机?
- js对象属性 通过点(.) 和 方括号([]) 的不同之处
- confirm提示弹出确定和取消按钮
- HTTP ERROR 400 Bad Request
- SharePoint 2013 How to Backup Site Collection Automatically With a PowerShell Script
- hive函数篇一
热门文章
- [COI2007] [luogu P1823] Patrik 音乐会的等待 解题报告 (单调栈)
- [Codeforces 757E] Bash Plays with Functions (数论)
- Random numbers
- Conditionals
- BZOJ 4552 排序 Heoi2016
- Golang 在 Mac、Linux、Windows 下交叉编译
- View简介
- Slimming Paint (a.k.a. Redesigning Painting and Compositing)
- 共用体 union
- [Bug]Python3.x AttributeError: libtest.so: undefined symbol: fact