目录

0x1:检查网页的来源

0x2:检查内置的隐藏变量

0x3:用POST不用GET

检查网页的来源应该怎么做呢?首先我们应该检查$_SERVER[“HTTP_REFERER”]的值与来源网页的网址是否一致,就可以判断是否遭受到CSRF攻击

例如:

form.html

<html>

<head>

<title>提交参数</title>

</head>

<body onload=”document.form1.submit();”>

<form action=http://localhost/show.php method=”post” name=”form1” id=”form1”>

<input type=”hidden” name=”id” id=”id” value=”4” />

<input type=”hidden” name=”delete” value=”1” />

</form>

</body>

</html>

show.php

<?php

//检查来源文件,来源文件必须是本域

$source_page=”http://localhost/show.php”;

//检查文件来源是否正确

If(strncmp($_SERVER[“HTTP_REFERER”], $source_page, strlen($source_page))) //大于或者小于IF都为真

{

//清除$_POST变量

unset($_POST);

}

Else

{

If(isset($_POST[“delete”])) //如果选中删除按钮

{

//执行文章删除代码

}

}

?>

检查内置的隐藏域变量又该怎么做呢?

例如:

Form.html:

<html>

<head>

<title>参数提交</title>

</head>

<body onload=”document.form1.submit();”>

<form action=”http://localhost/show.php” method=”post” name=”form1” id=”form1”>

<input type=”hidden” name=”id” id=”id” value=”4” />

<input type=”hidden” name=”delete” value=”1” />

</form>

</body>

</html>

show.php:

<?php

//打开Session

session_start();

if(!isset($_SESSION[“token”])) //如果没用产生token

{

//产生独特的ID,并且使用MD5来编码

$token=md5(uniqid(rand(),true));

//创建Session变量

$_SESSION[“token”]=$token;

//检查是否相等

If($_SESSION(“token”)!=$_POST[“token”])

{

//清除POST变量

unset($_POST);

}

}

?>

<html>

<head>

<title>参数&token提交</title>

</head>

<body>

<form action=”http://localhost/show.php” method=”post”>

<input type=”submit” name=”delete” id=”delete” value=”删除” />

<input type=”hidden” name=”id” value=”<?php echo $_GET[“id”]?>” />

<input type=”hidden” name=”token” value=”<?php echo $_SESSION[“token”];?>” />

</form>

</body>

</html>

使用POST不使用GET:

一般情况,在传递表单字段时一定要使用POS方法,而不要使用GET方法,处理变量时也不要使用$_REQUEST数组。虽然使用POST方法不一定能够保证绝对不会受到CSRF攻击,但是黑客要破解起来也比较困难。

CSRF防范策略研究的更多相关文章

  1. csrf防范笔记

    1.验证Http的refer字段 http有一个refer字段,用以记录该http请求的来源地址 好处: 简单便捷,后台开发人员只需要设置一个拦截器 缺点: Referer 的值是由浏览器提供的,虽然 ...

  2. 从Yii2的Request看其CSRF防范策略

    用ajax请求还是用命令行CURL请求总是会得到 http400:Bad Request的错误, 而如果用Web网页方式GET访问(去除verbFilter的POST限制),是正常的,是CSRF验证的 ...

  3. HTTP Response Spliting 防范策略研究

    目录0x1:HTTP请求的格式0x2:HTTP请求的方法0x3:HTTP响应的格式0x4:HTTP响应拆分攻击0x5:防范的方法 HTTP请求的格式 客户端所提出的HTTP请求包含下列信息:(1)请求 ...

  4. 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范

    一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...

  5. CSRF与XSS攻击的原理与防范

    CSRF 1.概念与原理 CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统.例如: 用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网 ...

  6. 【转】CSRF攻击的应对之道

    CSRF 背景与介绍CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患,比如 ...

  7. CSRF 攻击的应对之道--转

    http://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/ 简介: CSRF(Cross Site Request Forgery, 跨站域 ...

  8. CSRF 攻击的应对之道

    转载自imb文库 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在 ...

  9. 前端安全之CSRF攻击

    前端安全之CSRF攻击 转载请注明出处:unclekeith: 前端安全之CSRF攻击 CSRF定义 CSRF,即(Cross-site request forgery), 中文名为跨站请求伪造.是一 ...

随机推荐

  1. oracle中比较两表表结构差异和数据差异的方法

    在工作中需要完成这么一个需求:比较两个表的表结构是否形相同,并找出差异.比较两个表中的数据是否相同,并找出差异数据?    分析:由于表结构中字段比较多,手工比较很浪费时间,而且不能保证不出错误.对于 ...

  2. MVC 提交表单

    public ActionResult UserLogin() { var UserName = Request["username"]; var Password = Reque ...

  3. Win7 IIS (HTTP Error 500.21 - Internal Server Error)解决

    今天在测试网站的时候,在浏览器中输入http://localhost/时,发生如下错误: HTTP Error 500.21 - Internal Server Error Handler " ...

  4. 创建Mysql 序列

    create table sequence( name ) not null primary key, current_value , increment , max_value BIGINT, -- ...

  5. 第四十四篇、iOS开发中git添加.gitignore文件

    .gitignore文件可以直接使用https://github.com/github/gitignore 1.在项目中设置忽略文件(1)将从github上荡下来的对应的.gitignore文件(Sw ...

  6. C# to Maxscript

    I figured I’d do a quick tutorial about something a little more difficult, but still very important. ...

  7. vJine 第三波 之 Lua 来袭 vJine.Lua

    vJine.Lua vJine.Lua是Lua语言的C#封装库,可实现通过C#直接运行Lua脚本并与Lua脚本交互的功能. 1. 授权: MPL2.0 相关资源: nuget:(https://www ...

  8. C#中Excel的导入和导出的几种基本方式

    在上一篇(http://www.cnblogs.com/fengchengjushi/p/3369386.html)介绍过,Excel也是数据持久化的一种实现方式.在C#中.我们常常会与Excel文件 ...

  9. Bootstrap学习笔记(二) 表单

    在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...

  10. [GeekBand] STL与泛型编程(1)

    在C++语法的学习过程中,我们已经对模板有了基本的了解.泛型编程就是以模板为工具的.泛化的编程思想.本篇文章介绍了一些在之前的文章中没有涉及到的一些模板知识.泛型编程知识和几种容器.关于模板的一些重复 ...