php常见安全问题
XSS攻击
原理:
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。xss漏洞一般发生于与用户交互的地方。
危害:
恶意弹出消息框,影响用户体验
获取用户的cookie或者ajax请求攻击者的服务器窃取用户信息
可以使用ajax不断调用被攻击网站的某个接口,严重的可能导致带宽被打满无法正常处理用户的请求,除此之外也可以通过调用被攻击网站的某个接口来实现一些个人利益比如在社交网站伪造数据提高影响力等。
预防办法:
参数验证,只接受用户输入我们期待的值
使用htmlspecialchars函数将用户输入的HTML标签实体化
CSRF攻击
原理:
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,就是冒充用户发请求。比如:灌水机器人等。
危害:
服务器处理大量虚假的请求数据库储存过多垃圾信息影响服务器处理正常请求的性能
预防办法:
暂时的方法:分析日志找到发送请求的ip,禁止访问;
验证码:设置机器难以识别的验证码,比如掺杂中文的验证码,拖动的验证码等;
设置token验证,基本原理是通过比较隐藏的表单传过来的用户发出请求的时间与收到请求时的时间比较,允许一定范围的延时,防止被破解可以加入秘钥和随机字符串。(time()->md5(秘钥).time()->rand.substr(md5(rand秘 钥),0,10).time())
SQL注入
原理:
SQL Injection:是一种利用未过滤/未审核用户输入的攻击方法,通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
例子:
SQL注入一般是利用‘’或者“”拼接SQL语句或者–注释掉原有的SQL语句,减少查询的条件获取更多信息或者尝试猜测表名,一旦知道表名就可以对表做增删改查等各种操作。下面是几个常见的SQL注入的例子:
1)将查询的where条件变成恒真,
正常的SQL查询语句(xxx为用户要输入的内容):
SELECT fieldlist FROM table WHERE fieldname='xxx';
1
如果输入 xxx’ or ‘1’='1,SQL语句就变成了
SELECT fieldlist FROM table WHERE fieldname='xxx' or '1'='1';
1
这样的话where条件就不起作用了。
2)猜字段名(–注释掉后面的内容)
SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND userid IS NULL; --';
SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND email IS NULL; --';
SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND password IS NULL; --';
SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND loginid IS NULL; --';
上面的语句如果正常执行的话,就说明我们猜测的字段名字是正确的,否则说明猜错了,继续猜。
3)跟上面同样的道理,利用子查询猜测表名:
SELECT fieldlist FROM table WHERE fieldname = 'xxx' AND 1=(SELECT COUNT(*) FROM tabname); --';
根据经验推断表名,进行尝试,我们并不关心表里面有多少条记录而是判断当前的表名是不是我们猜测的这个。
4)除了对表进行增删改查以外实际上还可修改数据库
SELECT fieldlist FROM table WHERE fieldname = 'xxx'; DROP TABLE members; --';
利用 ; 结束上一条语句,在–注释掉后面的语句执行单行多条语句,可能会恶意修改数据库或者更新某个字段的内容。
危害:
// 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
// 网页篡改:通过操作数据库对特定网页进行篡改。
// 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
// 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
// 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
// 破坏硬盘数据,瘫痪全系统。
预防办法:
// 参数绑定,预处理。
// 一定要接SQL语句抛出的异常,否则容易泄露表名、字段名、数据库服务器等信息
session文件漏洞
Session攻击是黑客最常用到的攻击手段之一。当一个用户访问某一个网站时,为了免客户每进人一个页面都要输人账号和密码,PHP设置了Session和Cookie用于方便用户的使用和访向。
对于Session漏洞的防范:
从前面的分析可以知道,Session攻击最常见的就是会话劫持,也就是黑客通过各种攻击手段获取用户的Session ID,然后利用被攻击用户的身份来登录相应网站。为此,这里可以用以下几种方法进行防范:一是定期更换Session ID,更换Session ID可以用PHP自带函数(session_id())来实现;
二是更换Session名称,通常情况下Session的默认名称是PHPSESSID,这个变量一般是在cookie中保存的,如果更改了它的名称,就可以阻档黑客的部分攻击;
三是对透明化的Session ID进行关闭处理,所谓透明化也就是指在http请求没有使用cookies来制定Session id时,Sessioin id使用链接来传递.关闭透明化Session ID可以通过操作PHP.ini文件来实现;四是通过URL传递隐藏参数,这样可以确保即使黑客获取了session数据,但是由于相关参数是隐藏的,它也很难获得Session ID变量值。
全局变量漏洞
PHP中的变量在使用的时候不像其他开发语言那样需要事先声明,PHP中的变量可以不经声明就直接使用,使用的时候系统自动创建,而且也不需要对变量类型进行说明,系统会自动根据上下文环境自动确定变量类型。这种方式可以大大减少程序员编程中出错的概率,使用起来非常的方便。
对全局变量漏洞防范:
对于PHP全局变量的漏洞问题,以前的PHP版本存在这样的问题,但是随着PHP版本升级到5.5以后,可以通过对php.ini的设置来实现,设置ruquest_order为GPC。另外在php.ini配置文件中,可以通过对magic_quotes_runtime进行布尔值设置是否对外部引人的数据中的溢出字符加反斜线。为了确保网站程序在服务器的任何设置状态下都能运行。可以在整个程序开始的时候用get_magic_quotes_runtime检测设置状态决定是否要手工处理,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉。
文件漏洞
文件漏洞通常是由于网站开发者在进行网站设计时对外部提供的数据缺乏充分的过滤导致黑客利用其中的漏洞在Web进程上执行相应的命令。假如在lsm.php中包含这样一段代码:include($b."/aaa.php".),这对黑客来说,可以通过变量$b来实现远程攻击,可以是黑客自已的代码,用来实现对网站的攻击。可以向服务器提交a.php include=http://lZ7.0.0. 1/b.php,然后执行b.php的指令。
对文件漏洞的防范:
对于PHP文件漏桐可以通过对服务器进行设置和配置来达到防范目的。这里具体的操作如下:
一是把PHP代码中的错误提示关闭,这样可以避免黑客通过错误提示获取数据库信息和网页文件物理路径;
二是对open_basedir尽心设置,也就是对目录外的文件操作进行禁止处理;这样可以对本地文件或者远程文件起到保护作用,防止它们被攻击,这里还要注意防范Session文件和上载文件的攻击;
三是把safe-made设置为开启状态,从而对将要执行的命令进行规范,通过禁止文件上传,可以有效的提高PHP网站的安全系数。
php常见安全问题的更多相关文章
- asp.net MVC 常见安全问题及解决方案
asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session rid ...
- (转载)RESTful架构风格下的4大常见安全问题
转载自<RESTful架构风格下的4大常见安全问题>,作者:马伟 伴随着RESTful架构风格的大量应用微服务架构的流行,一些本来难以察觉到的安全问题也逐渐开始显现出来.在我经历过的各种采 ...
- [转]asp.net MVC 常见安全问题及解决方案
本文转自:http://www.cnblogs.com/Jessy/p/3539564.html asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request ...
- 这些Kubernetes常见安全问题,你遇到过几个?
导语:在 Threat Stack 公布的2020年第一季度安全报告中,列举了在AWS Web服务部署Kubernetes的组织所遇到的最常见安全问题. 该报告建议已部署Kubernetes的IT组织 ...
- Web 开发常见安全问题
不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过.这就是这篇科普文章的存在意义,希望 Web 开发者在开发时能依此逐条检查代码中的安全问题. 注:服务器运维相关的安全注意事项 ...
- 【转】web常见安全问题以及测试方法
web安全是我们测试组一直以来作为和性能测试并驾齐驱的两个重点.开发的过程中还需要着重注意,该转义的地方转义:该屏蔽的地方屏蔽,该过滤的地方过滤等等.年底又到了,势必又有大批的发号抽奖之类的活动开发. ...
- Web开发常见安全问题
转载自: http://blog.csdn.net/fengyinchao/article/details/50775121 不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过 ...
- Web项目开发中常见安全问题防范
本文章纯粹是个人收藏,其中各种也是略略了解,下面直接贴出知识点./捂脸/捂脸 计算机程序主要就是输入/输出,安全问题由此产生,凡是有输入的地方都可能带来安全风险.根据输入的数据类型,web应用主要有数 ...
- Web项目开发中常见安全问题及防范
计算机程序主要就是输入数据 经过处理之后 输出结果,安全问题由此产生,凡是有输入的地方都可能带来安全风险.根据输入的数据类型,Web应用主要有数值型.字符型.文件型. 要消除风险就要对输入的数据进行检 ...
随机推荐
- sql server 自增长显式添加值
如果想在自增列添加数据,会提示我们不能插入显式值 解决:
- Python基础—13-面向对象及异常处理
面向对象及异常处理 内置函数 总结:__init__.__del__.__str__.attr系列.item系列.__call__ __str__与__repr__ 使用print/str方法时会自动 ...
- 修改状态栏,电池,wifi的颜色为白色
修改状态栏,电池,wifi的颜色为白色 在info里面设置View controller-based status bar appearance,为no
- 如何在Vue中使用Mockjs模拟数据的增删查改
之前一直使用json-server在前端开发时,搭建本地数据接口测试,但有时又需要将做好的项目放于 github page上做项目演示.在本地时,json server很好使用,但一旦放在github ...
- C++中vector,set,map自定义排序
一.vector排序 vector支持cmp,就类似数组,可以直接sort. #include <iostream> #include <algorithm> #include ...
- linux基础指令以及权限管理
基础指令 #打印字符串 echo hello linux #将file1 和 file2粘合在一起,打印到标准输出流 cat file1 file2 标准输入输出 标准输入,stdin,即键盘.鼠标输 ...
- jquery 节点
$("ul li:eq(3)") // 元素的index位置工0开始计数,所以这里的3实际为第4个元素 $("ul").find("li" ...
- 微信小程序INC自增自减MUL自乘问题
今天使用到微信小程序云开发中的数据库自增字段问题出现了错误 Uncaught (in promise) ReferenceError: _ is not defined 官方给出的INC方法文档 db ...
- 洛谷 P3952
题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...
- elasticsearch 5.x 系列之六 文档索引,更新,查询,删除流程
一.elasticsearch index 索引流程 步骤: 客户端向Node1 发送索引文档请求 Node1 根据文档ID(_id字段)计算出该文档应该属于shard0,然后请求路由到Node3的P ...