CSRF攻击
CRSF是(cross-site request forgery),中文名称叫跨站请求伪造,缩写为crsf/xrsf.
CRSF可以做什么
攻击者盗用了你的身份,以你的名义发送的恶意请求。包括以你的名义发邮件,使用你的名义转账,买东西。会造成个人隐私泄露和财产安全。
攻击原理
就是你在登录一个网站A的时候,会产生一个cookie,当你还没有登出这个网站时,你又去访问了一个危险网站,这个危险网站要求访问A,发送了一个request。
看似简单,但是有时无法避免
你不能保证你在切换网页的时候登出一个网站,还有在你关闭网页的时候,cookie可能还存在。
示例
你登录a网站进行银行转账的请求,如
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
然后你又去访问危险网站b,他里面有这样的一段代码
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
这样你会发现你的银行帐号少了1000块钱。
这是一个简单例子,当然实际的银行不会这么傻。
CRSF防御
* 服务端进行防御
在客户端页面增加伪随机数
<?php
//构造加密的Cookie信息
$value = “DefenseSCRF”;
setcookie(”cookie”, $value, time()+3600);
?>
然后在客户端增加hash值
<?php
$hash = md5($_COOKIE['cookie']);
?>
<form method=”POST” action=”transfer.php”>
<input type=”text” name=”toBankId”>
<input type=”text” name=”money”>
<input type=”hidden” name=”hash” value=”<?=$hash;?>”>
<input type=”submit” name=”submit” value=”Submit”>
</form>
然后在服务端进行校验
<?php
if(isset($_POST['check'])) {
$hash = md5($_COOKIE['cookie']);
if($_POST['check'] == $hash) {
doJob();
} else {
//...
}
} else {
//...
}
?>
验证码防御
.One-Time Tokens(不同的表单包含一个不同的伪随机值)
验证 HTTP Referer 字段
查看请求的网站是否是自己的请求
在 HTTP 头中自定义属性并验证
通过xhr这个类把所有的请求加上crsftoken这个http头属性
但是太麻烦
网络层的协议有哪些
看下面这张表
从底向上1-7层模型
应用层 | DHCP DNS FTP Gopher HTTP IMAP4 IRC NNTP XMPP POP3 · SIP SMTP SNMP SSH TELNET RPC RTCP RTP RTSP SDP SOAP GTP · STUN NTP SSDP |
---|---|
表示层 | HTTP/HTML · FTP · Telnet · ASN.1(具有表示层功能) |
会话层 | ADSP·ASP·H.245·ISO-SP·iSNS·NetBIOS·PAP·RPC·RTCP·SMPP·SCP·SSH·ZIP·SDP(具有会话层功能) |
传输层 | TCP · UDP · TLS · DCCP · SCTP ·RSVP · PPTP |
网络层 | IP (IPv4 · IPv6) · ICMP · ICMPv6 · IGMP ·IS-IS · IPsec · BGP · RIP · OSPF ·ARP · RARP · ipx |
数据链路层 | Wi-Fi(IEEE 802.11) · WiMAX(IEEE 802.16) ·ATM · DTM · 令牌环 · 以太网路 ·FDDI · 帧中继 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN ·STP |
物理层 | 以太网路卡 · 调制解调器 · 电力线通信(PLC) · SONET/SDH(光同步数字传输网) ·G.709(光传输网络) · 光导纤维 · 同轴电缆 · 双绞线 |