咱妈说别乱点链接之浅谈CSRF攻击

WEB安全(八)什么是CSRF攻击?为什么说Token可以防止CSRF攻击? CSRF攻击概述 **CSRF(Cross Site Request Forgery)**是 跨站请求伪造 。 Cookie 有一个过期时间,在这段时间内,Cookie 是存储在客户端的,当再次访问相同的网站时,浏览器会自动在 HTTP 请求中自动带上该网站用户登录后的 Cookie CSRF 攻击也正是利用这点,借用用户的 Cookie,去执行非用户本意的操作。 举个例子: 小明登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接 阅读详情

平时经常听到人们说别乱点链接,小心有病毒。还有长辈们转发的“天呐~XXX的阴谋,全是病毒”、“XXX惊天大病毒,点了苹果手机就要爆炸!”、“现在转发热门连接会乱扣费!千万别点!”。

到底长辈们说的这些是对的还是错的,是真的还是假的?下面我用通俗易懂的语言为大家剖析。

CSRF攻击就是假装你去行骗

首先我们说说CSRF(Cross-site request forgery),它的中文名称是跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

简单地说,CSRF就是利用了我们的登录状态或者授权状态(请注意“利用”,并没有窃取到),然后做一些损害我们自身利益的事情。

举个例子,CSRF使用我们微信头像和昵称,然后去跟咱爸妈要钱。“爸,生活费不够了。你打到XXX账户上”,咱爸看见头像和昵称以为是亲生的,他就转账。如此,行骗成功。

GET方式造成的CSRF攻击

长辈们说得对,链接确实不能随便点。我用简单的代码举个例子。

信任的网站test.com

假设我们有一个银行账户,其中有一个登录页面login.php和付款页面paybill.php,这些页面都属于我们信任的网站test.com(test.com网站是虚拟的)。

在login.php中设置cookie进行登录:

<?php
    setcookie('uid', 1, time()+86400);
    echo "your uid is {$_COOKIE['uid']}";

在paybill.php通过身份验证后进行扣款,但是必须输入收款人和扣款金额:

<?php
   //身份验证
    if (!isset($_COOKIE['uid']) || $_COOKIE['uid']< 0) {  
        die('login error!');
    }
   //金额获取   
    if (!isset($_GET['money'])) {
        die('no money');
    }   
   //收款人获取
    if (!isset($_GET['to_who'])) {
        die('nobody');
    }   
    $uid = $_COOKIE['uid']; 
    $money = $_GET['money'];
    $to_who = $_GET['to_who'];
   //此处应该还有相关DB操作,省去一万字
    echo "transfer {$money} yuan to {$to_who}!";

刷新一下login.php,进行登录(实际的用户登录更为复杂,这里进行简单模拟了)

在浏览器访问paybill.php页面,转钱1000元给妈妈。

http://test.com/csrf/paybill.php?money=1000&to_who=mama

黑客网站

这时候黑客发现test.com网站没有做任何防御措施,他立刻在自己的网站B上伪造了一个页面,页面上有这么一个链接,他的收款人to_who变成了hacker。

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <a href="http://test.com/csrf/paybill.php?money=1000&to_who=hacker" taget="_blank">震惊!!史上尺度最大的照片!!<a/>
    </body> 
</html>

假设因为好奇心点击了该连接:

这样就转了1000元给了hacker

为什么会出现这种情况,我们在别的网站点击链接居然能扣自己账户的钱?点击链接前,我们已经登录了信任网站test.com,而这个test.com/csrf/paybill.php?money=1000&to_who=hacker这个连接是我们自己发送的,test.com会识别当前已经登录,然后转账,test.com网站无法判断到底是谁让我们点击的。

从上面这个实例可知,完成CSRF攻击流程:

1、用户登录了信任的网站A,并且保存登录状态

2、黑客找出网站A没有防御的链接,通过社会工程学伪装,诱导点击。

3、只要登录状态保持,用户主动访问目标链接,则攻击成功。

有人说那每次访问其他网站,把之前的网站都注销。是的,这个办法可以,但这么做这现实吗?我们需要注销许多常用的网站,下次登录又要输入用户名和密码,极其反人类。这肯定不是最佳办法,防御措施应该让程序员考虑,用户别乱点链接是最重要的。

CSRF的攻击渠道不一定来自其他网站,也可以是广告邮件、QQ空间、微信、facebook等社交媒体或软件。试想一下,如果你的女朋友知道这个链接,她在QQ上发给你:

http://test.com/csrf/paybill.php?money=1000&to_who=girlfriend你点击后,那就转了1000元给女朋友,假设她将money改成10w,后果真的不敢想象,你居然存了这么私房钱,跪搓衣板吧,钱也都到了你女朋友账户上。

好了,小白用户看见这里可以关闭,别乱点链接就对,该给女朋友的钱的还是一分不能少。

POST也能造成CSRF攻击

上面的CSRF可以说相当危险,更新资源的操作不应该使用GET方式,GET方式只应该用于读操作。更新操作一定要使用POST方式,特别涉及到钱的问题。

然而POST方式可以解决大部分的CSRF问题,还有剩下少部分的聪明的黑客,一样能够模拟POST请求,伪造身份进行攻击。

假设paybill.php 我们修改为POST取:

<?php
    if (!isset($_COOKIE['uid'])) {
        die('login error!');
    }   
    if (!isset($_POST['money'])) {
        die('no money');
    }   
    if (!isset($_POST['to_who'])) {
        die('nobody');
    }   
    $uid = $_COOKIE['uid']; 
    $money = $_POST['money'];
    $to_who = $_POST['to_who'];
    if ($uid > 0) {
        echo "transfer {$money} yuan to {$to_who}!";
    }

访问http://test.com/csrf/paybill.php?money=1000&to_who=girlfriend,提示没有money

但是道高一尺魔高一丈,聪明的黑客也改进了代码,使用POST提交,并且money改为2000:

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="http://test.com/csrf/paybill.php" method="post">
            <input type="hidden" name="money" value="2000">
            <input type="hidden" name="to_who" value="girlfriend">
            <input type="submit" value="点击中大奖">
        </form>
    </body> 
</html>

点击中大奖,如下(又转了2000元给女朋友):

抓包结果如下,可以看到Cookie: uid=1和money=2000&to_who=girlfriend都已发送过去。

POST http://test.com/csrf/paybill.php HTTP/1.1
Host: test.com
Referer: http://hack.com/hack/welcome.php
Cookie: uid=1

money=2000&to_who=girlfriend

如此一来,不管哪种访问方式都可能受到攻击。所以,这并不是GET和POST谁更安全的问题,POST只是提高了攻击门槛和成本(其实也就多几行html和js)。

划重点,那么CSRF能够攻击的根本原因是:服务器无法识别你的来源是否可靠。

防御CSRF的思想

那么防御的方法有很多:

1、比如加上验证码。但这么做很繁琐,并且影响用户体验。

2、比如转账需要二次密码验证,现在很多银行就这么搞的。

3、确认来源是否可靠(推荐)

不管防御方法1还是2,都是让用户自身再次确认授权。

这种安全防范的事儿,更应该由程序验证。

根据验证是否可靠性思路,可以有以下几种方法:

验证HTTP Referer 字段

HTTP协议里面定义了一个访问来源的字段,这个字段叫Referer。黑客伪造的链接或表单是在其他网站上,所以我们可以判断Referer是否为自身网站,如果是,则允许访问,如果不是,则拒绝访问。

从我们的网站访问paybill.php,抓包发现Referer是不存在的

"HTTP_REFERER"=>""

从黑客的网站访问paybill.php,抓包发现Referer来自黑客网站

["HTTP_REFERER"]=> string(35) "http://hack.com/welcome.php"
然后代码里判断:

if  (HTTP_REFERER!="")  {
    die('可能是CSRF攻击,拒绝访问');
} else {
    die('允许访问');
}

所以我们只需要拦截Referer就可以判断是否为攻击。

但是这种方法是有缺陷的,上面实验尝试过,如果对方在QQ上发送给你一个链接呢?点击的时候属于主动点击,此时一样没有Referer。程序会把它归属为安全请求,那么就被绕过了。并且如果某些低版本的浏览器存在漏洞(比如IE6),Referer很有可能被篡改,所以这个方法并非十全十美。

服务端验证请求的token一致性

csrf攻击的核心原理就是利用用户验证信息储存cookie中,发送请求,使得服务器无法判断真伪,而token之所以能够拦截,就是因为它是csrf攻击过程中几乎不可能伪造的东西。

实现原理:在服务端生成一个随机的token,加入到HTTP请求参数中,服务器拦截请求,查看发送的token和服务端的是否一致,若一致,则允许请求;若不一致,则拒绝请求。

新增form.php表单页面,将token存入session(不要存在cookie中,你懂的):

<?php
session_start();
$csrf_token = md5(openssl_random_pseudo_bytes(32));//生成随机token
$_SESSION['token']= $csrf_token;
?>
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>csrf</title>
</head>
<body>
    <h1>转账</h1>
    <form action="paybill.php" method="POST">
        money:<input type="text" name="money">
        to_who:<input type="text" name="to_who">
        <input type="hidden" name="token" value="<?php echo $csrf_token ?>">
        <input type="submit" value="ok">
    </form>
</body>
</html>

在paybill.php获取token,与session中存储的token判断是否一致:

<?php
    session_start();
    if (! isset($_COOKIE['uid'])) {
        die('login error!');
    }   
    if (! isset($_POST['money'])) {
        die('no money');
    }   
    if (! isset($_POST['to_who'])) {
        die('nobody');
    }   
    if (! isset($_POST['token']) || $_POST['token'] !=  $_SESSION['token']) {
        die('forbidden');
    }   
    $uid = $_COOKIE['uid']; 
    $money = $_POST['money'];
    $to_who = $_POST['to_who'];

    if ($uid > 0) {
        echo "transfer {$money} yuan to {$to_who}!";
    }

查看页面form.php:

请求成功:

每次访问表单页面,都应该生成一个token:

<input type="hidden" name="token" value="a88f67a7effa917450cff12e179df35d">

我们再尝试从黑客网站进行访问,显示”forbidden”,证明在token验证时被拦截:

这样子就已经有效防御csrf攻击。该方法可以用于a链接和表单等请求,属于同一个原理。

注意:网上很多文章并没有生成唯一的或者随机性较大的token,都是同一个token,这是有问题的,如果黑客看到该token,一样可以伪造请求,进行攻击。

Ajax防御CSRF

实际上A jax防御的思想也可以利用上面的token验证方式。

在IBM上看过一篇文章说Ajax防御时,在 HTTP 头中自定义属性并验证token。

它是这么说的:

把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

个人觉得不需要如此麻烦,易用性也不太好,直接对Aajx进行一次封装,加入一个open_token的选项,true就把token也发送过去,否则不进行验证,原理和上面是一样的。

最好将token赋值给js的一个全局变量,整个网站都可以使用。

总结

CSRF防御原则:

  • GET方式不能用于更新资源的操作

  • POST方式请求加上随机token验证

OWASP 2017年的十大安全威胁已经公布了,我们可以看看2013年和2017年CSRF稳稳排在第八位。

总之,CSRF是一种常见的Web安全威胁,它攻击特点是利用用户身份信息伪装,发送请求,造成危害。这种攻击成本极低,但网站和用户不注意,很容易受到伤害。当然,更令人欣赏的是黑客利用社会工程学欺骗大众,这才是最重要的。

如果大家对社会工程学感兴趣,推荐一部电影——《我是谁:没有绝对安全的系统》,非常精彩。

互联网安全你攻我防,你枪我盾,没有永远灵验的方法,只有学会攻击,才能抵御攻击。

此文已由作者授权腾讯云技术社区发布,转载请注明文章出处

如何防止CSRF攻击? 如上代码所示,可以看到,该页面只要打开,就会向Gmail发送一个post请求,请求中,执行了“Create Filter”命令,将所有邮件转发到“hacker@hakermail.com”,A由于刚刚就登录了Gmail,所以这个请求发送时,携带着A的登录凭证(Cookie),Gmail的后台接收到请求,验证了确实有A的登录凭证,于是成功给A配置了过滤器,黑客可以查看A的所有邮件,包括邮件里的域名验证码等隐私信息,拿到验证码后,黑客就可以要求域名服务商把域名重置给自己。 阅读详情

相关推荐

跨境电商ERP开发之Shopee开发者账号申请

引言:由于电子信息技术和经济全球化的进一步发展,电子商务在国际贸易中的影响力和关键作用日渐突显,已变成中国出口贸易的市场趋势。跨境电商未来的发展前景必定是有助于减少经济成本、推动全球贸易便利化,有助于提高国内群众福祉,有助于打造良好的营商环境,从而推动经济长期健康发展。 gitee仓库地址: https://gitee.com/naturalwish/SSERP/tree/master 以下授权教学同ShopeeOpen Platform - Developer Guide 申请流程 ..

naturalwish的专栏 3637

一文带你了解csrf攻击

一文带你快速了解csrf攻击的过程以及如何防御csrf攻击

weixin_45642975的博客 1581

Kaamel白皮书:IoT设备安全隐私评估实践

明确评估的目的和预期结果。

kaamelai的博客 1317

【Web 安全】CSRF 攻击详解

文章目录一、CSRF 简介二、CSRF 原理三、CSRF 的危害四、CSRF 的攻击类型五、CSRF 的防御1. 验证 HTTP Referer 字段2. 在请求地址中添加 token 并验证3. 在 HTTP 头中自定义属性并验证参考链接 一、CSRF 简介 CSRF(Cross Site Request Forgery,跨站域请求伪造),也被称为 “One Click Attack” 或者 Session Riding,通常缩写为 CSRF 或者 XSRF 。 尽管听起来像跨站脚本(XSS),但它与X

weixin_44211968的博客 1万+

基于DFT的mbist sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 921

Python小白也能搞定!用you-get一键下载B站视频合集的保姆级教程

本文为Python新手提供了使用you-get工具一键下载B站视频合集的完整教程。从环境配置、基础下载操作到高级批量下载技巧,详细介绍了如何利用这个开源工具高效获取视频资源,包括解决常见问题和实用优化建议,帮助用户轻松实现离线学习。

weixin_42544663的博客 458

CSRF 攻击详解

禁用 CSRF 保护有其合理的应用场景,特别是在开发 RESTful API、使用其他防护措施、内部应用和非浏览器客户端时。然而,需要谨慎对待这个决定,并确保在适当的场景中启用 CSRF 保护,以防范潜在的安全风险。

只为成功找方法 不为失败找借口 5614

GNSS接收机性能测试全攻略:从实验室到真实场景

本文系统介绍了GNSS接收机从实验室到真实场景的完整性能测试流程。首先通过GNSS模拟器进行射频传导测试,评估接收机的基础性能;其次进行天线OTA测试,考察整机系统表现;最后通过精心设计的外场路测,在复杂环境中验证其实际定位精度与可靠性。文章强调,只有结合可控的实验室验证与多变的外场挑战,才能对接收机性能做出全面、真实的评价。

weixin_28365523的博客 518

CSRF攻击与防御(写得非常好)

转载地址:http://www.phpddt.com/reprint/csrf.html CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,

认知 行动 坚持 25万+

手把手教你用OpenCompass评估Qwen1.5-1.8B模型(含数据集配置详解)

本文提供了使用OpenCompass评估Qwen1.5-1.8B-Chat模型的详细实战教程。内容涵盖从创建独立Python环境、下载模型与核心数据集,到编写配置文件、执行评测命令及解读结果的完整流程。重点解析了模型与数据集的配置细节,并分享了性能调优与常见问题排查方法,旨在帮助开发者快速上手系统化的模型评估。

weixin_29228781的博客 137

开源TMS系统cortex-tms私有化部署与二次开发实战指南

运输管理系统(TMS)是现代物流数字化的核心组件,它通过将线下零散的物流操作转化为线上标准化、可追溯的数据流,实现订单、调度、跟踪与结算的全流程管理。其技术原理通常基于微服务架构,采用Spring Boot、Vue.js等成熟技术栈构建,确保系统的稳定性和可扩展性。TMS的技术价值在于显著提升物流企业的运营效率、降低成本并增强过程可控性,尤其适用于中小型物流企业实现从手工管理到系统化管理的跨越。在应用场景上,TMS广泛应用于车队管理、订单跟踪和财务结算等环节。本文聚焦于开源TMS项目cortex-tms,深

weixin_42523907的博客 746

CSRF攻击:陌生链接不要随便点

接着黑客通过各种手段引诱 David 去打开他的链接,比如 hacker.com,然后在 hacker.com 页面中,黑客编写好了一个邮件过滤器,并通过 Gmail 提供的 HTTP 设置接口设置好了新的邮件过滤功能,该过滤器会将 David 所有的邮件都转发到黑客的邮箱中。最后的事情就很简单了,因为有了 David 的邮件内容,所以黑客就可以去域名服务商那边重置 David 域名账户的密码,重置好密码之后,就可以将其转出到黑客的账户了。

2501_90250799的博客 1028

人工智能训练师三级考试备考全攻略|报名条件+真题+补贴申领一站式通关(2026版)

本专栏是人工智能训练师三级考证最完整的备考指南,共77篇文章,覆盖从职业认知、报名实操、AI基础知识、数据标注、模型训练测试部署、考前冲刺到考后进阶的全链路。本导读按模块整理了全部文章链接,帮你快速定位所需内容。人工智能训练师是国家认定的正式职业,证书可在osta.mohrss.gov.cn查询,三级证书可申领最高3120元技能补贴。

白话机器学习 1796

什么是CSRF攻击,如何防范CSRF攻击?

什么是CSRF攻击,如何防范CSRF攻击?

weixin_47450807的博客 7388

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

通过DVWA教你学会CSRF攻击

【CSRF】通过DVWA教你学会CSRF攻击 Hello 各位小伙伴大家好~ 这里是熬夜在写公众号的小编… 话说小编身边又有小伙伴脱单了,今天依然是为别人爱情流泪的一天… 唉,无心写公众号(自暴自弃中~) 今天就一起来看看,什么是CSRF攻击吧… Part 1:什么是CSRF攻击? CSRF(Cross-Site Request Forgery)跨站点请求伪造。 是指利用受害者未失效的身份...

Monsterlz123的博客 2426

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

如何防止CSRF攻击

  随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。当然,浏览器自身也在不断在进化和发展,不断引入 CSP、Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁,这需要前端技...

许文杰的博客 6375

浅谈web安全——CSRF攻击

跨站请求伪造(CSRF) CSRF(cross site request forgery)和 XSS 是两个不同维度上的分类。上述中的XSS 是实现 CSRF 的诸多途径中的一条,但绝对不是唯一的一条。一般习惯上把通过 XSS 来实现的 CSRF 称为 XSRF。 CSRF 的全称是“跨站请求伪造”,而 XSS 的全称是“跨站脚本攻击”。看起来有点相似,它们都是属于跨站攻击——不攻击服务器端...

夏天的博客(wx:a1024271896) 1787

什么是CSRF 攻击

CSRF(Cross-Site Request Forgery,跨站请求伪造)攻击是一种网络攻击手段,它利用合法用户的权限来执行非授权的操作。本篇讲CSRF的工作原理

Sherry Tian的博客 1577

CSRF与钓鱼链接攻击

CSRF发生的原理和过程,验证Referer这种不靠谱的防御即绕过

球球的博客 6241

什么是 CSRF 攻击?

CSRF 攻击利用用户认证会话执行未授权操作,Spring Boot 通过 Spring Security 提供内置防护,自动要求 CSRF 令牌。示例展示了表单提交防护及与分页、Swagger、ActiveMQ 等集成。针对你的查询(ThreadLocal、Actuator、热加载),通过清理、Security 和 DevTools 解决。

lssffy的博客 1522
上一篇: 搞点事情,使用node搭建反向代理
下一篇: 【airflow实战系列】 基于 python 的调度和监控工作流的平台
Qcloud_KID
博客等级 码龄10年 34粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值