web安全问题-csrf
web安全问题 csrf
<script>
document.write(`
<form name="commentForm" target="csrf" method="post" action="http://localhost:1521/post/addComment">
<input name="postId" type="hidden" value="13">
<textarea name="content">来自csrf</textarea>
</form>
`
);
var iframe = document.createElement('iframe');
iframe.name = 'csrf';
iframe.style.display = 'none';
document.body.appendChild(iframe);
setTimeout(function(){
document.querySelector('[name=commentForm]').submit();
},1000)
</script>
<img src="http://localhost:1521/ajax/addComment?postId=13&content=123123">
<a href="http://localhost:1521/ajax/addComment?postId=13&content=123123"></a>
1.原理
用户登录A网站 - A网站确认身份 - B网站向A网站发起请求(带A网站身份)
cookie会保留在网页中
2.CSRF攻击危害
- 利用用户登录状态 (盗取用户资金 转账消费)
- 用户不知情 (冒充用户发帖背锅)
- 完成业务请求 (损坏网站声誉)
www.a.com前端 <=> www.a.com后端
www.b.com前端 => www.a.com后端
B网站向A网站请求带A网站Cookies 不访问A网站前端 refer为B网站
csrf防御攻击
1.cookies进行设置 只是chrome支持
sameSite: 'strict'
2.在前端页面加入验证信息
3.验证码 (前后端 图形验证码会降低用户体验)
4.token 随机字符串
- 必须经过目标网站前端才能获取token
token
var csrfToken = parseInt(Math.random()*999999,10);
cookies.set('csrfToken',csrfToken); //放到cookies
this->ajaxReturn('要有token')
前台不用显示 hidden
post的时候校验
post的token 和 cookie里面的token
如果是ajax请求
<meta name="csrf_token" content="">
js获取之后在后台跟cookies里面的值对比
用户打开很多窗口 提交在前面的token 只有最后一个表单可以成功提交 token在cookie中只有一个
解决方法
$_SESSION['SESSION_KEY.$form_name']
判断refer
var refer = request.headers.referer
if(!/^https?\/\/localhost/.test(referer)){
throw new Error()
}
php防御CSRF
1.Cookie sameSite属性
2.HTTP refer头
<?php
//获取referer头
if($_SERVER['HTTP_REFERER']){
$isLegal = strpos($_SERVER['HTTP_REFERER'],'http://websecurity.local/') === 0;
var_dump($isLegal);
}
3.token 一份给cookie 一份给表单
$csrfToken = "1231321";
setcookie('csrfToken',$csrfToken);
$_POST['csrfToken'] $_COOKIE['csrfToken']对比
web安全问题-csrf的更多相关文章
- web安全问题-cookie
web安全问题 cookie 1.cookies只能设置过期 不能删除 <script> now.toGMTString() => 事件可以用来设置cookie document.c ...
- WEB安全问题
WEB安全问题我没太多经验,但是这块内容还是很重要,所以必须要了解学习一下. 简单总结了一下,分成以下5类, 1.DDOS,瘫痪式攻击,解决方法是记录异常请求的ip地址,主动拒绝或者将攻击ip添加到防 ...
- Web API CSRF保护实现
Web API CSRF保护实现 这次自己实现了类似jQuery中ajax调用的方法,并且针对RESTFul进行了改造和集成,实现的A2D AJAX接口如下: $.ajax.RESTFulGetCol ...
- web安全问题分析及处理
前言 这是我观看了<前端漏洞分析及处理-蔡慧芨>公开课之后的一个总结及简单实践体会.在可能的情况下我会把他们都实际操作一遍,更加深刻地体会前端安全的重要性. web安全问题有哪些 XSS- ...
- web 安全问题(一):CSRF 攻击
什么是CSRF CSRF是怎么产生的 CSRF的攻击对象 CSRG的攻击手段 CSRF的防御措施 什么是CSRF 全称是(Cross Site Request Forgery)跨站请求伪造.也就是恶意 ...
- WEB安全--CSRF剖析
CSRF攻击:攻击者构造合法的HTTP请求,随后利用用户的身份操作用户帐户的一种攻击方式. 一.CSRF攻击原理CSRF的攻击建立在浏览器与Web服务器的会话中:欺骗用户访问URL.二.CSRF攻击场 ...
- 小白日记50:kali渗透测试之Web渗透-CSRF
CSRF CSRF原理:经常与XSS混淆. 从信任的角度进行区分:XSS:利用用户对站点的信任:CSRF:利用站点对已经身份认证的信任(有一定的信任)[默认情况:站点不信任客户端] 结合社工在身份认证 ...
- 三种常见的Web安全问题
XSS漏洞 1.XSS简介 跨站脚本(cross site script)简称为XSS,是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式. XSS是指恶意攻击者利用网站没有对 ...
- web安全CSRF和XSS
web端的安全攻击有CSRF和XSS两种,将通过以下三个方面介绍这两种安全攻击: 1.基本概念和缩写 2.攻击原理 3.防御措施 CSRF 1.基本概念和缩写 CSRF(Cross-site req ...
随机推荐
- java代码输出质因数
package com.badu; import java.util.Scanner; //分解质因数问题: //从键盘输一个数, //首先最小质因数为2 //n不能被2整除时, //n能被2整除时, ...
- 断路器(CircuitBreaker)设计模式
断路器是电器时代的一个重要组成部分,后面总是有保险丝熔断或跳闸的断路器是安全的重要保障. 微服务最近几年成为软件架构的热门话题,其益处多多.但需要知道的是,一旦开始将单块系统进行分解,就上了分布式系统 ...
- PATL2-007. 家庭房产-并查集
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- windows下socket编程:区分shutdown()及closesocket()
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
- 未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 提供程序
Visual Studio 8使用了Access数据库,provider选择了ACE.OLEDB,但是运行时出现了错误,提示未在本地计算机上注册"Microsoft.ACE.OLEDB.12 ...
- Python类(三)-多继承的区别
多继承的有两个方式,一个是广度优先,一个是深度优先Python2中经典类按深度优先,新式类按广度优先Python3中经典类和新式类都按广度优先 # -*- coding:utf-8 -*- __aut ...
- 2015.11.3 RichBox改变若干文本颜色
for(int i=1;i<rtb.Lines.Length;i++) { if(rtb.Lines[i] == rtb.Lines[i - 1]) { int bg = rtb.GetFirs ...
- leetcode653
class Solution { public: bool findTarget(TreeNode* root, int k) { queue<TreeNode> Q; vector< ...
- 推荐一款GIF录制工具
LICEcap 是一款屏幕录制工具,支持导出 GIF 动画图片格式,轻量级.使用简单,录制过程中可以随意改变录屏范围 下载 http://www.cockos.com/licecap/
- Git中远程仓库的使用
1.查看当前的远程库 要查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字.在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用 ...