您的位置 首页 php

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

程序员需要掌握基本的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攻击的危害
主要危害来自攻击者窃取用户身份并发送恶意请求。 例如:模拟用户的行为,以发送电子邮件,发送消息以及保护诸如付款和转账之类的财产。
例如:某个购物网站购买商品时,采用,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自学中心 感谢阅读!

文章来源:智云一二三科技

文章标题:PHP开发中经常遇到的Web安全漏洞防御详解

文章地址:https://www.zhihuclub.com/79363.shtml

关于作者: 智云科技

热门文章

评论已关闭

1条评论

  1. I wanted tto thank you ffor thos excellent read!! I definitely
    enjoyyed every lirtle bit oof it. I’ve goot you book-marked tto chek oout new stuff you post…

网站地图