API 网关的安全

摘要: 本篇文章是总结工作中遇到的安全问题

正文:

API 网关的安全

XSRF/CSRF

跨站请求伪造(Cross-site request forgery)是一种挟制用户在当前已登录的web程序上执行非本意的操作的攻击方法,简单来说就是你在浏览器打开了两个页面,其中一个页面通过窃取另一个页面的cookie来发送伪造请求

Example

某一家银行转账操作的url地址为:http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName

藏身于恶意网站的某代码片段:<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">

若账户人员为Alice的用户访问了恶意网站,其登录信息尚未过期,就会丢失1000资金

CSRF攻击并不是直接获取用户账户控制权,而是欺骗用户浏览器,让其已用户的名义执行操作

防御措施

  1. HTTPReferer字段,这个字段用以标明请求来源于哪个地址,看其url是否与要请求地址位于同一域名下
  2. 添加校验Token,恶意网站的请求不带Token无法通过校验

XSS

跨站脚本(Cross-site scripting)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。

防御措施

  1. 过滤特殊字符(转义)
  2. 使用浏览器自带的xss-filter
    • X-XSS-Protection
  3. CSP(Content Security Policy)
    • 如限制script src Content-Security-Policy: script-src ‘self’
    • frame-ancestors 限制了当前页面可以被哪些页面以iframe,frame,object等方式加载
    • Github的CSP参数 123456789101112Content-Security-Policy: default-src 'none'; base-uri 'self';block-all-mixed-content;connect-src 'self' uploads.github.com status.github.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com;font-src assets-cdn.github.com;form-action 'self' github.com gist.github.com;frame-ancestors 'none';frame-src render.githubusercontent.com;img-src 'self' data: assets-cdn.github.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self';media-src 'none';script-src assets-cdn.github.com;style-src 'unsafe-inline' assets-cdn.github.com
  4. X-Frame-Options:SAMEORIGIN 这个页面只允许同源页面加载
  5. Http-Only 保护cookie

JWT的安全

JWT一种基于JSON的、用于在网络上声明某种主张的令牌,由三部分组成,头部消息体签名

前端将JWT通过HTTP Header发送给服务端可以有效防护CSRF,但是服务端既然无状态,Token在客户端存储位置就是一个问题

存放位置

  • 存在Cookie,要使用Http-Only 保护cookie
  • 存在Local Storage 无法防止XSS LocalStorage 的API通过JavaScript提供的,攻击者可以通过XSS攻击窃取信息,如Token等

12345

if(localStorage.length){ for(i in localStorage) { console.log(localStorage.getItem(i)); }}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

『高级篇』docker之kubernetes基础集群附在功能kube-proxy和kube-dns(36)

每台工作节点上都应该运行一个kube-proxy服务,它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配...

1122
来自专栏区块链

具有ID欺骗功能的NFS客户端–NfSpy

NfSpy简介 NfSpy是一个开源的Python库,当我们加载一个NFS文件共享服务时,它可以自动伪造出NFS凭证。该工具包含下面两个子程序: 1. n...

22510
来自专栏信安之路

OWASP Top 10关键点记录

注入攻击漏洞,例如SQL,OS以及LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释...

880
来自专栏算法修养

把Asp.Net Core 2.0部署在Linux上,使用Nginx代理服务器,并且用Systemctl命令以服务的方式监听项目

在Linux上部署.net core 2.0程序: 第一步:配置Nginx代理 在/etc/nginx/sites-available/default 中添加 ...

3946
来自专栏cloudskyme

WSO2 ESB(3)

在上一篇写的是消息中介,接下来是代理服务 代理服务 顾名思义,代理服务充当了WSO2 ESB服务的代理,通常是一个已经存在的服务端点,代理服务可以使用不同的传...

4027
来自专栏Debian社区

Debian 9 安装配置 Caddy Server

Caddy 是一个用 Golang 开发的高效 Web Server,相比 Nginx,它的配置和使用要简单很多,能自动开启 HTTPS、并且支持 HTTP/2...

3812
来自专栏代码世界

Django 跨域请求处理

1874
来自专栏Laoqi's Linux运维专列

Saltstack 远程操作(Ⅱ)

1875
来自专栏Python

centos7 nginx安装 及MySQL-python

2955
来自专栏JackeyGao的博客

Django小技巧19: 保护敏感信息

互联网是一片荒地, 在互联网上部署 Web 服务的时候, 安全是首要考虑的。Django 在提供可靠和安全的API方面做的非常出色.但是前提是你要正确的使用它们...

1463

扫码关注云+社区