Web 安全概念

Web 安全概念

Web 应用中存在很多安全风险,这些风险会被黑客利用,轻则篡改网页内容,重则窃取网站内部数据,更为严重的则是在网页中植入恶意代码,使得用户受到侵害。常见的安全漏洞如下:

  • XSS 攻击:对 Web 页面注入脚本,使用 JavaScript 窃取用户信息,诱导用户操作。
  • CSRF 攻击:伪造用户请求向网站发起恶意请求。
  • 钓鱼攻击:利用网站的跳转链接或者图片制造钓鱼陷阱。
  • HTTP参数污染:利用对参数格式验证的不完善,对服务器进行参数注入攻击。
  • 远程代码执行:用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。

安全威胁XSS的防范

XSS(cross-site scripting跨域脚本攻击)攻击是最常见的 Web 攻击,其重点是『跨域』和『客户端执行』。

xss 能干什么

  • 获取页面数据
  • 获取cookies
  • 劫持前端逻辑
  • 发送请求
  • 偷取网站任意数据
  • 偷取用户资料
  • 偷取用户密码和登录状态

案例

  • 站酷,可以穿js,导入一个图片,利用src来取到cookies,就能取到登录态
  • qq空间

xss攻击注入xss

  • @1型 html节点内容
  • @2型 html属性
  • @3型 javascript代码
  • @4型 富文本

    XSS 攻击一般分为两类:

  • Reflected XSS(反射型的 XSS 攻击)
  • Stored XSS(存储型的 XSS 攻击)

Reflected XSS

主要是url带上参数,发送给别人,可以转成短网址

反射型的 XSS 攻击,主要是由于服务端接收到客户端的不安全输入,在客户端触发执行从而发起 Web 攻击。比如:

在某购物网站搜索物品,搜索结果会显示搜索的关键词。搜索关键词填入<script>alert(‘handsome boy‘)</script>, 点击搜索。页面没有对关键词进行过滤,这段代码就会直接在页面上执行,弹出 alert。

Stored XSS

基于存储的 XSS 攻击,是通过提交带有恶意脚本的内容存储在服务器上,当其他人看到这些内容时发起 Web 攻击。一般提交的内容都是通过一些富文本编辑器编辑的,很容易插入危险代码。

JSONP XSS

JSONP 的 callback 参数非常危险,他有两种风险可能导致 XSS

1、callback 参数意外截断js代码,特殊字符单引号双引号,换行符均存在风险。

2、callback 参数恶意添加标签(如 <script> ),造成 XSS 漏洞。

XSS 的防范方式

有两种态度可以选择:第一种是前置过滤,即将用户所有数据都进行转义, 在输出时候在前端(模板渲染)层面直接输出。 第二种是用户输入的数据不经过转义就直接存储起来,前端在使用时候保证对数据进行转义。

  • 1、(@1型@2型)浏览器自带防御,设置x-xss-protection,但只能防止html相关的,但是不是每一种浏览器都支持,只支持反型
  • 2、(@1型@2型)将不可信变量输出到 div / body / attribute / javascript tag / style 之前,对 & < > " ‘ / 进行转义,转义可以在存储时,也可以在显示时
  • 3、(@1型@2型@3型)尽量不在特定地方输出不可信变量:script / comment / attribute / tag / style, 因为逃脱 HTMl 规则的字符串太多了。
  • 4、(@4型)富文本类型,按白名单保留部分标签和属性。好处是比较全面,但是比较麻烦,黑名单不全面.可以使用cheerio来实现
  • 将不可信变量输出 URL 参数之前,进行 URLEncode
  • 使用合适的 HTML 过滤库进行过滤
  • 预防 DOM-based XSS,见 DOM based XSS Prevention Cheat Sheet
  • 开启 HTTPOnly cookie,让浏览器接触不到 cookie
  • CSP也是一种方案

    白名单xss或者使用xss的那个库

const cheerio = require(‘cheerio‘);
const fs = require(‘fs‘);

const html = fs.readFileSync(‘./html.html‘, ‘utf8‘);

const $ = cheerio.load(html);

const whiteList = {
  ‘img‘: [‘src‘]
}
console.log($.html());
$(‘*‘).each((index, elem) => {
  if (!whiteList[elem.name]) {
    $(elem).remove();
    return;
  }

  for(let attr in elem.attribs) {
    if (whiteList[elem.name].indexOf(attr) === -1){
      $(elem).attr(attr, null)
    }
  }
})

console.log(‘d‘, $.html());

CSP

W3C 的 Content Security Policy,简称 CSP,主要是用来定义页面可以加载哪些资源,减少 XSS 的发生。

CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

过滤 Html 标签能否防止 XSS?

请列举不能的情况?

用户除了上传
<script>alert(‘xss‘);</script>
还可以使用图片 url 等方式来上传脚本进行攻击
<table background="javascript:alert(/xss/)"></table>
<img src="javascript:alert(‘xss‘)">
还可以通过各种编码转换 (URL 编码, Unicode 编码, HTML 编码, ESCAPE 等) 来绕过检查
<img%20src=%22javascript:alert(‘xss‘);%22>
<img src="javascrip&#116&#58alert(/xss/)">

安全威胁 CSRF 的防范

CSRF(Cross-site request forgery跨站请求伪造,也被称为 One Click Attack 或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。

CSRF 攻击会对网站发起恶意伪造的请求,严重影响网站的安全。因此框架内置了 CSRF 防范方案。

危害

  • 利用用户登录态
  • 用户不知情
  • 完成业务请求

    案例

  • qq游戏利用q币买东西

    防范方式

通常来说,对于 CSRF 攻击有一些通用的防范方案,简单的介绍几种常用的防范方案:

  • Synchronizer Tokens:通过响应页面时将 token 渲染到页面上,在 form 表单提交的时候通过隐藏域提交上来。
  • Double Cookie Defense:将 token 设置在 Cookie 中,在提交 post 请求的时候提交 Cookie,并通过 header 或者 body 带上 Cookie 中的 token,服务端进行对比校验。
  • Custom Header:信任带有特定的 header(例如 X-Requested-With: XMLHttpRequest)的请求。这个方案可以被绕过,所以 rails 和 django 等框架都放弃了该防范方式
  • cookies可以使用samesite来设置,可以限制cookies的携带,但是只要chrome支持,
  • 可以referer头可以判断是不是来自自己的网址

    框架结合了上述几种防范方式,提供了一个可配置的 CSRF 防范策略。

  • 可以使用图片验证码

使用方式

同步表单的 CSRF 校验

在同步渲染页面时,在表单请求中增加一个 name 为 _csrf 的 url query,值为 ctx.csrf,这样用户在提交这个表单的时候会将 CSRF token 提交上来:

AJAX 请求

在 CSRF 默认配置下,token 会被设置在 Cookie 中,在 AJAX 请求的时候,可以从 Cookie 中取到 token,放置到 query、body 或者 header 中发送给服务端。

In jQuery:

var csrftoken = Cookies.get(‘csrfToken‘);

function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
  beforeSend: function(xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
      xhr.setRequestHeader(‘x-csrf-token‘, csrftoken);
    }
  },
});

Session vs Cookie 存储

默认配置下,框架会将 CSRF token 存在 Cookie 中,以方便 AJAX 请求获取到。但是所有的子域名都可以设置 Cookie,因此当我们的应用处于无法保证所有的子域名都受控的情况下,存放在 Cookie 中可能有被 CSRF 攻击的风险。框架提供了一个配置项,可以将 token 存放到 Session 中。

刷新 CSRF token

当 CSRF token 存储在 Cookie 中时,一旦在同一个浏览器上发生用户切换,新登陆的用户将会依旧使用旧的 token(之前用户使用的),这会带来一定的安全风险,因此在每次用户登陆的时候都必须刷新 CSRF token

cookies

同源策略

特性

  • 域名
  • 有效期
  • 路径
  • http-only
  • secure 只要https还可以使用
  • same-site

    作用

  • 存储个性化的设置
  • 存储为登录是的唯一标示
  • 保存通讯状态
  • 存储登录的凭证

cookies的安全策略

签名防篡改

私有变换(加密)

http-only

secure

same-site

点击劫持

用户亲手操作,但是用户不知情,从而盗取用户资金(转账消费)、获取用户信息

网页iframe要操作的网页,然后把目标网站透明的设为0,让点击按键与攻击者设计的背景设置成一止

点击劫持 防御

  • js禁止内嵌,top是不同的,iframe的top的window是不一样的,但是在iframe中设置snadbox属性就可以禁止掉js,js跳转失效

    "" 应用以下所有的限制。

    allow-same-origin 允许 iframe 内容被视为与包含文档有相同的来源。

    allow-top-navigation 允许 iframe 内容从包含文档导航(加载)内容。

    allow-forms 允许表单提交。

    allow-scripts 允许脚本执行。

  • X-FRAME-OPTIONS禁止内嵌

    X-Frame-Options 响应头有三个可选的值:

    DENY:页面不能被嵌入到任何iframe或frame中;

    SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中;

    ALLOW-FROM:页面允许frame或frame加载。

  • 其他辅助手段比较添加验证码等

    中间人攻击与http传输窃听

  • 窃听用户密码
  • 窃听传输敏感信息
  • 加广告
  • 重定向

HTTP 是网络应用广泛使用的协议,负责 Web 内容的请求和获取。然而,内容请求和获取时会经过许多中间人,主要是网络环节,充当内容入口的浏览器、路由器厂商、WIFI提供商、通信运营商,如果使用了代理、FQ软件则会引入更多中间人。由于 HTTP 请求的路径、参数默认情况下均是明文的,因此这些中间人可以对 HTTP 请求进行监控、劫持、阻挡。

在没有 HTTPS 时,运营商可在用户发起请求时直接跳转到某个广告,或者直接改变搜索结果插入自家的广告。如果劫持代码出现了 BUG ,则直接让用户无法使用,出现白屏。

数据泄露、请求劫持、内容篡改等等问题,核心原因就在于 HTTP 是全裸式的明文请求,域名、路径和参数都被中间人们看得一清二楚。HTTPS 做的就是给请求加密,让其对用户更加安全。对于自身而言除了保障用户利益外,还可避免本属于自己的流量被挟持,以保护自身利益。

尽管 HTTPS 并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击。不过HTTPS是现行架构下最安全的解决方案,并且它大幅增加了中间人攻击的成本。

密码安全

密码的作用

密码的存储

密码的传输

密码的替代方案

生物特征密码的问题

密码传输的安全性

  • http传输
  • 频率限制
  • 前端加密意义有限

Sql/Nosql 注入

注入攻击是指当所执行的一些操作中有部分由用户传入时, 用户可以将其恶意逻辑注入到操作中. 当你使用 eval, new Function 等方式执行的字符串中有用户输入的部分时, 就可能被注入攻击. 上文中的 XSS 就属于一种注入攻击. 前面的章节中也提到过 Node.js 的 child_process.exec 由于调用 bash 解析, 如果执行的命令中有部分属于用户输入, 也可能被注入攻击。

防治手段

  • 给表名/字段名加前缀 (避免被猜到)
  • 报错隐藏表信息 (避免被看到, 12306 早起就出现过的问题)----关闭错误输出
  • 过滤可以拼接 SQL 的关键字符
  • 对用户输入进行转义----对数据进行转义
  • 验证用户输入的类型 (避免 limit, order by 等注入)----检查数据类型
  • 使用参数化查询
  • 使用ORM(对象关系映射)

上传问题

上传文件,再次访问上传的文件,上传的文件被当成程序解析(nodejs基本不存在,php等其他的会有问题)

  • 限制上传后缀
  • 文件类型检查
  • 文件内容检查
  • 程序输出
  • 权限控制-可写可执行互斥

信息泄露的途径

  • 错误信息失控
  • sql注入
  • 水平权限控制不当
  • xss/csrf

oauth 可以

其他安全问题

拒绝服务dos

1. TCP半连接
1. HTTP连接
1. DNS
大规模分布式拒绝服务攻击DDOS
  • 流量可达几十上百G
  • 分布式(肉鸡、代理)
  • 极难防御
DOS攻击防御
  • 防火墙
  • 交换机/路由器
  • 流量清洗
  • 高防IP
  • 避免重逻辑业务
  • 快速失败快速返回
  • 防雪崩机制
  • 有损服务
  • cdn

重放攻击

请求被拦截或者被窃听,然后被攻击者利用,重新发送

危害

  • 用户被多次消费
  • 用户登录态被盗
  • 多次抽奖

防御

  • 加密(https)
  • 时间戳
  • token(session)
  • nonce
  • 签名

原文地址:https://www.cnblogs.com/chenjinxinlove/p/9379099.html

时间: 2024-08-06 02:41:17

Web 安全概念的相关文章

Web Service概念梳理

计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些早期介绍Web Service的书为准.如有错误,欢迎指正! -------------------------------------------------------------- 提前预警!概念太多,你需要仔细阅读,或要阅读两遍.   SOA                        

13.python中web框架概念的引入。

一.什么是web框架? 框架,就是一个为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回. 如果要动态生成HTML,就需要把上述步骤自己来实现.不过,接受HTTP请求.解析HTTP请求.发

Web Service概念

http://my.oschina.net/jiver/blog/100909Web Service概念 什么是Web Service呢?从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API.这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序.例如,笔者创建一个Web Service,它的作用是查询某公司某员工的基本信息.它接受该员工的编号作为查询字符串,返回该员工的具体信息.你可以在浏览器的地址栏中直接输入HTTP GET请求来调

python web编程-概念预热篇

互联网正在引发一场革命??不喜欢看概念的跳过,注意这里仅仅是一些从python核心编程一书的摘抄 这正是最激动人心的一部分了,web编程 Web 客户端和服务器端交互使用的“语言”,Web 交互的标准协议是HTTP(超文本传输协议).HTTP协议是TCP/IP 协议的上层协议,这意味着HTTP 协议依靠TCP/IP 协议来进行低层的交流工作.它的职责不是路由或者传递消息(TCP/IP 协议处理这些),而是通过发送.接受HTTP 消息来处理客户端的请求. HTTP 协议属于无状态协议,它不跟踪从一

web基础概念

什么是http? http是一种超文本传输协议(hyper text tranfer protocol),工作在应用层.超文本就是拥有超级链接的文本(html hyper text mark language 超文本标记语言),最开始的超文本传输协议只是为了方便文件检索的工具,并没有各种其他的东西. 这里我们主要介绍http协议实现的工具httpd(apache) 基础概念: URL(Uniform Resource Locator):资源标识,用于描述服务器上某特定资源的位置: 一次完整的ht

Web API概念

Web API介绍 API的概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. 任何开发语言都有自己的API API的特征输入和输出(I/O) var max = Math.max(1, 2, 3); API的使用方法(console.log('adf')) Web API的概念 浏览器提供的一套操作浏览器功能和页

Web基本概念

1.基本概念 web开发: web,网页的意思 静态web : html.css 提供给所有人看的数据始终不会变化! 动态web: 淘宝,几乎是所有的网站 提供非所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同. 技术栈:Servlet/JSP .ASP .PHP 在Java中,动态web资源开发的技术统称为Javaweb: 2.web服务器 技术讲解 ASP: 微软:国内最早流行的就是ASP, 在HTML中嵌入VB的脚本,ASP+COM: 在ASP开发中,基本一个

WCF、Net remoting、Web service概念及区别

Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK). WCF就是微软对于分布式处理的 编程技术的集大成者,它将DCOM.Remoting.Web Service.WSE.MSMQ集成在一起,从而降低了分布式系统开发者的学习曲线,并统一了开发标准. WCF是建立在.Net Framework 2.0基础之上的,包含在.NET 3.0/3.5

web service概念、架构及相关知识

一.WebService的定义 WebService有好几种定义: W3C组织对其定义:WebService是一个软件系统,为了支持跨网络的机器间互操作交互而设计. WebService通常被定义为一组模块化的API,我们能够通过网络进行调用,来运行远程系统的请求服务. WebService就是暴露给外部使用的,可通过web调用的一组API. WebService是一种跨编程语言和跨操作系统平台的远程调用技术. Web Service = XML+XSD,SOAP和WSDL 事实上这多种定义仅仅