web 安全

一、XSS (cross site script)跨站脚本攻击

首字母"X"是因为 CSS 会与层叠样式表的英文相同所以改用XSS简称。

(一)攻击方式
  1. 诱导链接(反射型攻击)
    攻击方式: 简单的说比如诱导用户打开一个连接,通过连接携带参数可执行脚本,而攻击者知道我们的代码方式,在页面能够执行或渲染,伪造可执行代码窃取用户信息(cookie等本地存储的信息),
    通过注入代码:
    ① 比如url访问 www.mydomain.com/ad?p=<script>alert(document.cookie)</script>
    ② 恰巧程序代码里面有使用这个p参数做代码执行或渲染,<script>alert(document.cookie)</script>, 此处关键代码是document.cookie, 攻击者可以在打开页面后,获取用户的cookie, 把cookie字符串提交到自己指定的服务器获得cookie数据。
    2.表单提交数据库存储,直出渲染
    web端通过表单元素输入可执行的脚本内容提交数据库存储。 前端与后端都“未做字符转义”的话,存储在数据的字符,在返回到html页面执行渲染时就会被执行,从而导致客户端用户本地数据泄露
(二)XSS (cross site script)跨站脚本防御
  1. CSP (Content-security-Policy) 网页安全政策, 白名单形式
    设置content-security-policy的方式有两种:
    (1) http header 属性 content-security-policy;
    ① 限制资源加载
    content-security-policy:
    script-src:外部脚本
    style-src:样式表
    img-src:图像
    media-src:媒体文件(音频和视频)
    font-src:字体文件
    object-src:插件(比如 Flash)
    child-src:框架
    frame-ancestors:嵌入的外部资源(比如<frame>、<iframe>、<embed>和<applet>)
    connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
    worker-src:worker脚本
    manifest-src:manifest 文件

default-src: 默认通用限制,比如'self' 限制网站本域名下的资源。 当指定了特殊类型限制后,会使用特殊的指定,比如img-src: https://www.otherdomian.com。

② Url 限制。 网页内的其它网页链接
frame-ancestors:限制嵌入框架的网页
base-uri:限制<base#href> 限制基准
form-action:限制<form#action> 限制表单提交

(2) <meta> 标签
<meta http-equiv="Content-security-policy" content="sth..." />
content内容与上面header部分设定一致。类型多个通过“;”分割,同一类型限制白名单内容通过空格分割。

  1. httponly cookie
    设定浏览器客户端cookie不可访问,只可以被http服务器所读取,防止恶意脚本窃取可读cookie;在设置cookie时设置httponly
  2. 转义字符
    对输入文本、输出文本转义字符,避免执行渲染
    function escape(str) {
    str = str.replace(/&/g, '&')
    str = str.replace(/</g, '<')
    str = str.replace(/>/g, '>')
    str = str.replace(/"/g, '&quto;')
    str = str.replace(/'/g, ''')
    str = str.replace(/`/g, '`')
    str = str.replace(///g, '/')
    return str
    }

对于特殊情况,比如富文本,需要正常输入、输出渲染的,可以过滤脚本代码 <script>为<script>

二、CSRF (跨站请求伪造)

跨站请求伪造,顾名思义是通过另外的站点伪造请求。

(一)攻击方式

比如访问了某个网站进行了登录A,此时cookie已经存在;然后被一种极具吸引力的图片或内容所吸引,点击进行了访问网站B,而在这个网站做了某些操作比如点击某个按钮或进入页面自动提交表单跳转到 你已登录的网站A页面,进行伪造请求。
攻击条件:

  1. cookie已产生
    用户登录的网站A,本地产生了cookie
  2. 网站未退出
    既忙其他事情,或忘记突出登录,cookie依然存在且在有效期
  3. 网站A没有做CSRF防御
    没有针对伪造请求做防御
(二)防御
  1. Header头信息的Referer属性检查
    在某些关键步骤页面的请求增加request header的Referer检验是否是指定的域名页面地址
  2. 增加验证码或token校验比对
    在关键步骤请求接口时增加验证码或token校验
  3. same site
    在设置本地cookie时指定same site, 不随跨域请求携带cookie, 该属性浏览器支持度还不够

三、伪造网站点击

攻击者通过在自己做的网站引入iframe展示目标网站的形式来引诱用户点击。

(一)攻击方式

通过障眼法技术手段,在网站通过iframe展示目标网站, 在网站悬浮透明的遮罩层等,用户点击后是访问了攻击者准备的网站

(二)防御手段
  1. 服务器响应头设置X-FRAME-OPTIONS属性
    通过设置response header的X-FRAME-OPTIONS来防御iframe嵌套网站。
    X-FRAME-OPTIONS: DENY | SAMEORIGIN | ALLOW-FROM 三个可选值。
    DENY 表示拒绝通过iframe展示。
    SAMEORIGIN 表示同域名下允许iframe展示网站。
    ALLOW-FROM http://www.mydomain.com;表示允许指定域名下iframe展示网站,多个域名逗号隔开。
  2. meta标签http-equiv
    // meta 标签http-equiv, 强制当前窗口已独立页面显示,防止别人在框架里面引用页面
<meta http-equiv="Window-target" content="_top">
  1. javascript 脚本防御
    对于一些很旧的浏览器,不能支持以上设置,通过js 脚本判断页面窗口是否是top是否是self本身。
    代码:
<script>
// 如果自己不是顶部窗口,代表是在iframe内
if (self !== top) {
  document.documentElement.style.display = 'none'
}
</script>

四、URL 跳转漏洞

通过一些网站内在实现的跳转url, 使用户访问到目标网站

(一)攻击方式

例如某个网站www.domain.com/link?url=xxxx, 黑客可以通过知名网站链接形式,做点击链接跳板最终跳到指定的网站

(二)防御
  1. referer 判断来源
  2. 生成的url 携带token, server 端验证 token ,来确定是不是自己生成的url,而非网站的程序

五、SQL注入

sql注入是攻击者利用sql语句的拼接执行代码的漏洞来做的攻击。
(一)攻击方式

  1. ' or 1=1, 比如用于某个查询语句 /:id/detail, 而sql语句(select * from order where id = 变量),而攻击者通过控制输入的变量, ' or 1=1 --, 此时为true,就可以使where语句后面代码失效,从而查询所有的订单
  2. ' -- , “--”为注释的意思,select * from user where username='admin' -- ' and psw='123456'
    从-- 开始后面的都会被注释掉,从而可以查询user表为admin的用户信息
    (二)防御
  3. 正则匹配校验是否符合预期
  4. 变量值过滤转换
  5. 预编译语句PreparedStatement ? 站位符
  6. 使用参数化接口方法语句
    参考资料:

常见六大Web安全攻防解析

Content Security Policy 入门教程

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容