整理一些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模式安装时可能遇到的攻击及解决的方法
整理一些PHP开发安全问题的更多相关文章
- C#.NET微信公众账号接口开发系列文章整理--微信接口开发目录,方便需要的博友查询
前言: 涉及微信接口开发比较早也做的挺多的,有时间的时候整理了开发过程中一些思路案例,供刚学习微信开发的朋友参考.其实微信接口开发还是比较简单的,但是由于调试比较麻烦,加上微信偶尔也会给开发者挖坑,并 ...
- 【Android开发资料分享】自己整理的Android开发资料,非常全面
学习Android以来,不知不觉中收集了大量非常优秀的Android开发资料,一直没有系统的整理,最近抽时间把收藏夹中的资料做了一下整理,现在分享给大家,希望能够帮助到需要的人.这份资料我还会不断的更 ...
- PHP开发安全问题总结
php给了开发者极大的灵活性,但是这也为安全问题带来了潜在的隐患,近期需要总结一下以往的问题,在这里借翻译一篇文章同时加上自己开发的一些感触总结一下. 简介 当开发一个互联网服务的时候,必须时刻牢记安 ...
- ESA2GJK1DH1K开发教程: 来看看最新整理的整个开发板的教程大纲吧
项目开发:教程大纲(测试板型号:ESA2GJK1DH1K) 购买链接: https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.25911deb ...
- 关于RESTful一些注意事项,和自己整理的接口开发规范
https://blog.csdn.net/u013731455/article/details/56278168 最近在研究restful,公司开发要使用,所以自己就去网上找了好些资料,并整理了一套 ...
- 20151028整理罗列某种开发所包括对技术(技术栈),“较为全面”地表述各种技术大系的图表:系统开发技术栈图、Web前端技术栈图、数据库技术栈图、.NET技术栈图
———————————— 我的软件开发生涯 (10年开发经验总结和爆栈人生) 爆栈人生 现在流行说全栈.每种开发都有其相关的技术.您是否觉得难以罗列某种开发所包括对技术(技术栈)呢? 您是否想过: ...
- [整理]前端模块化开发AMD CMD
前端模块化开发的价值 AMD (中文版) CMD 模块定义规范 标准构建 http://seajs.org http://chaoskeh.com/blog/why-seajs.html http:/ ...
- 【待整理】IOS开发之下载
一.传统的下载文件的方式 - (void)downloaderWithUrl:(NSURL *)url { NSURLRequest *request = [NSURLRequest requestW ...
- 2017最新整理移动Web开发遇到的坑
随着前端的热度不断升温,行业对前端的要求越来越高:精准无误的实现UI设计,已成为前端职业更加精细化的一种表现:随着移动互联网的发展.WebApp似乎一种不可逾越的鸿沟:越来越多的企业开始趋势于轻量级的 ...
随机推荐
- 4.Mocha的基本用法
转自:http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 有了测试脚本以后,就可以用Mocha运行它.请进 ...
- rest_framework(解析器 上)
rest_framework 解析器 对请求题数据进行解析 url from django.conf.urls import url,include from cmdb import views ur ...
- 数位$dp$
数位\(dp\)搞了一上午才搞懂.靠这种傻\(X\)的东西竟然花了我一上午的时间. 数位\(dp\) 概念 数位\(dp\)就是强制你分类一些数,例如给你一段区间,然后让你求出不包含\(2\)的数的个 ...
- 阿里云安装mysql数据库出现2002错误解决办法
在安装数据库的时候出现了如下错误: 解决办法如下: 1.在bin目录下 输入:kill -s 9 9907 再输入:ps -ef|grep mysql 显示如下: 2.回到lampp目录下,重启数据库 ...
- [BeiJing2009 WinterCamp]取石子游戏 Nim SG 函数
Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...
- ng-show ng-hide ng-if的区别
用途 ng-show ng-hide ng-if三个都可以用来控制页面DOM元素的显示与隐藏. ng-hide条件为true时,隐藏所在元素,false时显示所在元素. ng-show相反,条件为tr ...
- Entity Framework的一个实例
环境:Visual studio2013+sql server本地数据库 创建一个C#应用程序,首先在nuget中添加Entity Framework 接下来的工作分为四个主要部分: 第一部分:App ...
- [转载]CentOS 7虚拟机下设置固定IP详解
在 复制 他人作品之前,是因为我再此“跌倒”过一次,虽然原主说是永久地址,但是地址失效 不可避免.所以就原封不动的copy了过来,我自己也是按照他的一步一步配置的,我成功了,相信你们也会成功. 如果不 ...
- Haproxy实现web的页面的动静分离
一.Haproxy概述: 概述:Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,由C语言编写而成,支持会话保持.七层处理.健康检查.故障修复后自动加载.动静分离.HAProxy ...
- iOS开发系列之四 - UITextView 使用方法小结
// 初始化输入框并设置位置和大小 UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 300, 1 ...