page contents

PHP开发中经常遇到的Web安全漏洞防御详解

篇文章主要给大家介绍最经常遇到的3个:XXS,CSRF, SQL注入。 一、XSS漏洞1.XSS简介XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表css(Cascading Style Sheet)区别,缩写为XSS...

篇文章主要给大家介绍最经常遇到的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,控制受害者的机器对其他网站发起攻击

PHP开发中经常遇到的Web安全漏洞防御详解


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)重要信息必须加密

  • 发表于 2020-02-12 16:56
  • 阅读 ( 491 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章