Skip to content

WEB安全---ssrf和xss #15

Description

@z2014

最近在做项目时,被内部的安全平台扫出了漏洞,也是之前自己早就知道的一些攻击方式,但是在写代码时并没有注意到,这里先记录下:

1.ssrf

什么是ssrf呢?

是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

场景是我在用canvasToHtml的截图库时,由于上传的图片返回的是公司的cdn,因此,如果截图中含有图片时,datatourl就会报错,因为此时调用canvas的画布被认定是一张脏画布,因此这个库的解决方案是请求自己的服务器,再由服务器做一层转发,去请求cdn的地址,代码类似于

/picture?url=http://i..../c.png
到了服务端,我们拿到query,再做一次转发
ctx.body = req.pipe(request(imageUrl).on('error', next));
但是,其实这个时候是需要校验一下请求的url是不是我们的cdn路径的,很有可能她就会向我们的内网服务发起请求了

2.xss

xss想必每个人都不陌生,但是真的自己还是too young!

我用的是art-template来渲染模板

<script>
var result = {
    content: '<%- content %>'
};

当我的content是后端从location里面取出来并且做了加工之后,返回给模板渲染的时候,

这个时候就有可能会引起xss的问题:

只要攻击者伪造了一个引号后,就能轻松的实现xss,类似攻击者注入后,你的这段代码可能会变成

var result = {
    content: '[{a: 1}]';}doSomething('pp');{//
}

这里就会执行莫名其妙的dosomething函数。

攻击者能做到xss的攻击关键是因为我们在服务端处理location时,没有做单双引号的转义

' --> \'
"--->\"

以下是一些常见的代码漏洞引起的xss攻击
1.什么都不过滤,直接输出到html

const name = ctx.req.query.name;
render({
    name
});
// html模板渲染
<%= name %>

攻击url
http://localhost/test/reflection_xss?name=%3cscript%3Ealert(11)%3C/script%3E
解决方案:再html输出时htmlencode

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions