当前位置:首页 > PHP专题 > 正文

经常遇到的3大Web安全漏洞防御详解

12-17 PHP专题 头条号


程序员需要掌握基本的web安全知识,防患于未然,你们知道有多少种web安全漏洞吗?这里不妨列举10项吧,你们可以自己去网站找相应的教程来提升自己的
1、命令注入(Command Injection)
2、eval注入(Eval Injection)
3、客户端脚本攻击(Script Insertion)
4、跨网站脚本攻击(Cross Site Scripting, XSS)
5、SQL注入攻击(SQL injection)
6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
7、Session 会话劫持(Session Hijacking)
8 Session  会话固定(Sessionfixation)
9、HTTP响应拆分攻击(HTTP Response Splitting)
10、文件上传漏洞(File Upload Attack)

这篇文章主要给大家介绍最经常遇到的3个:XXS,CSRF,  SQL注入。
一、XSS漏洞
1.XSS简介
XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表css(Cascading Style Sheet)区别,缩写为XSS。攻击者主要使用跨站点脚本来读取Cookie或网站用户的其他个人数据。 一旦攻击者获得了这些数据,他就可以假装是该用户登录网站并获得该用户的权限。

2.跨站点脚本攻击的一般步骤
1,攻击者以某种方式将xss http链接发送给目标用户
2.目标用户登录该网站并打开攻击者在登录过程中发送的xss链接。
3.网站执行了这个xss攻击脚本
4.目标用户页面跳转到攻击者的网站,攻击者获得了目标用户的信息
5.攻击者使用目标用户的信息登录网站以完成攻击

3. XSS攻击的危险
1.窃取用户信息,例如登录帐户,网上银行帐户等。
2.使用用户身份读取,篡改,添加,删除公司敏感数据等
3.重要商业价值数据的盗窃
4.非法转移
5.强制电子邮件
6.网站挂马
7,控制受害者的机器对其他网站发起攻击



4.防止XSS解决方案
1)XSS的根本原因是客户端提交的数据未完全过滤,因此重点是过滤用户提交的信息。
2)将重要的cookie标记为http only,因此js中的document.cookie语句将不会获取cookie。
3)仅允许用户输入我们期望的数据。 例如:年龄 age只允许用户输入数字,数字外的字符被过滤掉。
4)对数据进行Html编码处理:当用户提交数据时,将其进行HTML编码,并且在下一次处理之前,将相应的符号转换为实体名称。
5)过滤或删除特殊的HTML标签,例如:<script>,<iframe>,<for <,> for>,
6)过滤js事件的标签。例如 "onclick=", "onfocus" 等等。

二、CSRF攻击(跨站点请求伪造)
1.CSRF简介
CSRF(Cross Site Request Forgeries),意为跨网站请求伪造,也有写为XSRF。攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。

2.CSRF攻击的危害
主要危害来自攻击者窃取用户身份并发送恶意请求。 例如:模拟用户的行为,以发送电子邮件,发送消息以及保护诸如付款和转账之类的财产。

例如:某个购物网站购买商品时,采用http://www.shop.com/buy.php?item=watch&num=1,item参数确定要购买什么物品,num参数确定要购买数量,如果攻击者以隐藏的方式发送给目标用户链接
那么如果目标用户不小心访问以后,购买的数量就成了1000个。

3.防止CSRF的解决方案
1)POST用于接收重要的数据交互。 当然,POST不是万能药。 锻造形式可能会破裂。
2)使用验证码。 只要涉及数据交互,请首先验证验证码。 这种方法可以完全解决CSRF。 但是,出于用户体验的考虑,网站无法向所有操作添加验证码。 因此,验证码只能用作辅助方法,而不能用作主要解决方案。
3)验证HTTP Referer字段,该字段记录HTTP请求的源地址。 最常见的应用是图片防盗链。
4)为每个表单添加令牌并进行验证。

三、SQL注入攻击(SQL injection)
1 SQL注入
所谓的SQL注入攻击,即当某些程序员编写代码时,他们没有判断用户输入数据的合法性,这使应用程序成为潜在的安全隐患。 用户可以提交一段数据库查询代码,并根据程序返回的结果获取一些他想知道的数据。

SQL注入攻击是一种攻击者,他以某种形式提交精心构造的sql语句并更改原始sql语句。 如果Web程序未检查提交的数据,将导致SQL注入攻击。

2 SQL注入攻击的一般步骤:
1)攻击者访问带有SQL注入漏洞的站点,并寻找注入点
2)攻击者构造注入语句,并将注入语句与程序中的SQL语句组合以生成新的SQL语句
3)将新的SQL语句提交到数据库进行处理
4)数据库执行新的SQL语句,引起SQL注入攻击

3 防止SQL注入的方式
通常,SQL注入的位置包括:
1)表单提交,主要是POST请求,包括GET请求;
2)URL参数提交,主要是GET请求参数;
3)提交Cookie参数;
4)HTTP请求标头中的一些可修改值,例如Referer,User_Agent等;

4.举例
举一个简单的例子,select * from user where id=100 ,表示查询id为100的用户信息,如果id=100变为 id=100 or 2=2,sql将变为:select * from user where id=100 or 2=2,将把所有user表的信息查询出来,这就是典型的sql注入。

5.防止SQL注入的解决方案
1)验证用户的输入并使用正则表达式过滤传入的参数
2)使用参数化语句,不拼接SQL,也可以使用安全存储过程
3)不要对每个应用程序使用具有管理员特权的数据库连接,而对特权限制使用数据库连接
4)检查数据存储类型
5)重要信息必须加密

以上是本文的全部内容,希望对大家的学习有帮助,也希望大家多多支持 php自学中心 感谢阅读!