web平安初探
XSS进击
XSS进击全称
跨站剧本进击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写殽杂,故将跨站剧本进击缩写为XSS,XSS是一种在web运用中的计算机平安破绽,它许可歹意web用户将代码植入到供应给别的用户运用的页面中。
分类
- 存储型(读取数据、富文本)
比方:应用图片加载毛病,实行剧本;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>xss存储型进击</title>
</head>
<body>
<div id='test'></div>
<script>
var text = "<img src='404.html' onerror='alert(1)'>" // 从背景读取的数据
var $test = document.querySelector('#test');
$test.innerHTML = text;
</script>
</body>
</html>
提防: 对html经行编码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>提防xss进击(html-encode)</title>
</head>
<body>
<div id='test'></div>
<script>
// 1. 富文本;白名单
// 2. 纯文本;html encode , js encode
var htmlEscape = function (str) { // 在展现的时刻转义
return String(str)
.replace(/&/g,'&')
.replace(/"/g,'"')
.replace(/'/g,''')
.replace(/</g,'<')
.replace(/>/g,'>')
}
var htmlUnescape = function (str){
return String(str)
.replace(/&/g,'&')
.replace(/"/g,'"')
.replace(/'/g,"'")
.replace(/</g,'<')
.replace(/>/g,'>')
}
var text = "<img src='404.html' onerror='alert(1)'>" // 从背景读取的数据
var $test = document.querySelector('#test');
$test.innerHTML = htmlEscape(text);
</script>
</body>
</html>
- 反射型(也叫非耐久型XSS,是指发作要求时,XSS代码出现在要求URL中,作为参数提交到服务器,服务器剖析并相应。相应效果中包括XSS代码,末了浏览器剖析并实行)
比方:经由过程地点栏传输数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>xss反射性进击</title>
</head>
<body>
<div id='test'></div>
<script>
// <img src='404.html' onerror='alert(1)'>
var $test = document.querySelector('#test');
$test.innerHTML = decodeURIComponent(window.location.hash);
</script>
</body>
</html>
hajack页面挟制
经由过程嵌套iframe,捏造实在网页猎取用户信息;
比方:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>页面挟制</title>
</head>
<body>
<div style="position: absolute;left: 16px;top:16px;opacity: 0;background: red">
账号:<input id='haha' oninput="changValue()" type="text"><br/>
暗码:<input type="text"><br/>
</div>
<iframe id="iframe" src="./hikjack.html" frameborder="0"></iframe>
<script>
function changValue(a) {
console.log(a);
}
window.onload = function(){
let oiframe = document.querySelector('#iframe').contentWindow;
let ohaha = document.querySelector('#haha');
let _ipt = oiframe.document.querySelector('input');
window.changValue = function(){
_ipt.value = ohaha.value;
}
}
</script>
</body>
</html>
提防: 能够经由过程检测是不是被嵌套来防备
if(window.parent != window){
alert('hikjack')
}
CSRF跨站捏造要求
CSRF(Cross-site request forgery)跨站要求捏造,也被称为“One Click Attack”或许Session Riding,平常缩写为CSRF或许XSRF,是一种对网站的歹意应用。只管听起来像跨站剧本(XSS),但它与XSS异常差别,XSS应用站点内的信托用户,而CSRF则经由过程伪装成受信托用户的要求来应用受信托的网站。与XSS进击比拟,CSRF进击每每不大盛行(因而对其举行提防的资本也相称希少)和难以提防,所以被以为比XSS更具危险性。
比方: 宣布引诱链接,经由过程iframe提交表单;(注重:发送时会带上你要求域名下的cookie)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>csrf进击</title>
</head>
<body>
<iframe src="" name="csrf-from"></iframe>
<form target="csrf-from" action="http://127.0.0.1:3001/csrf" method="post">
<input type="text" name="name" value="111">
<input type="submit" value="提交">
</form>
</body>
</html>
提防:1. 只管运用POST,限定GET;get的Referer Check保护本钱高;
2. 加考证码;
3. 经由过程token考证;
SSRF 服务器捏造要求
是一种由进击者组织构成由服务端提议要求的一个平安破绽。平常情况下,SSRF进击的目的是从外网无法访问的内部体系。SSRF 构成的缘由大都是因为服务端供应了从其他服务器运用猎取数据的功用且没有对目的地点做过滤与限定。
比方:
- 能够对外网、内网、当地举行端口扫描,某些情况下端口的Banner会回显出来(比方3306的);
- 进击运转在内网或当地的有破绽顺序(比方溢出);
- 能够对内网Web运用举行指纹识别,道理是经由过程要求默许的文件获得特定的指纹
- 进击内网或外网有破绽的Web运用
- 运用file:///协定读取当地文件
提防手腕:
- 限定域名,不许可提交内网域名;
- 限定内网ip,不许可提交内网ip;
- 限定端口;
- token考证;
- 禁用不需要的协定;(能够防备类似于file:///,gopher://,ftp:// 等引发的题目)
经由过程第三方考证,修正考证后跳转的地点,盗取用户信息
比方:扫码上岸