Asp.Net基础 - 9.Web开发原则

目录:

9.1.Web开发的一些基本原则

9.2 原则一
   9.2.1 C#代码是运行在服务器端的,JS代码是运行在浏览器客户端的

   9.2.2 在服务器端“弹出消息窗口”

   9.2.3 案例说明(客户端与服务端互不影响)

9.3 原则二

9.4 原则三

   9.4.1 客户端验证不能代替服务端验证

9.1.Web开发的一些基本原则


最小权限原则。只允许用户做***,而不是“不允许用户做***”
● 浏览器查看的是服务端代码的执行输出的文本,除非服务器有漏洞,否则浏览者无法查看服务端的aspx、cs代码,目标另存为也
是保存的aspx的执行结果,而看不到aspx的源代码。js、html是被输出到浏览器上执行的,因此无法禁止浏览者查看js、html。

 

9.2 原则一


 

9.2.1 C#代码是运行在服务器端的,JS代码是运行在浏览器客户端的

客户端确认.aspx

<form id="form1" runat="server"><div><asp:Button ID="Button1" runat="server" OnClientClick="return confirm('真的要删除吗?')" Text="删除" OnClick="Button1_Click" /><br /><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div></form>
写个button事件

protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "删除成功!" + DateTime.Now;
}

imageimage

在客户端生成

image
● 能在浏览器端完成的事情,就不要到服务端去做。
● 客户端是不可信的。

 

9.2.2 在服务器端“弹出消息窗口”

context.Response.Write("<script type='text/javascript'>alert('删除成功')</script>");明白为什么即可。

image

并不是真的是在服务器端运行的,只是生成了JavaScript代码到浏览器端,浏览器会在解析文档的时候运行alert,不推荐用这种写法,读懂即可,推荐用后面讲的RegisterClientStartupScript。只是渲染到浏览器端,所以并不会得到对话框关闭服务端的代码才会执行下去(在context.Response.Write("<script type='text/javascript'>alert('删除成功')</script>")后设置断点)

 

 

9.2.3 案例说明(客户端与服务端互不影响)

● 案例1、在项目中添加对System.Windows.Forms的引用,然后MessageBox.Show("Hello");,用CassiniDev.exe启动测试程序让学生们远程测试。证明C#代码是运行在服务器端的。
● 127.0.0.1是回环地址(LoopBack),就是表示通过回环地址访问本机,哪怕是本机外网地址也访问不了。localhost就是127.0.0.1别名。是无法在外部访问。
● 0.0.0.0 任意IP(Any IP),不用写死绑定的IP了,通过任何一块网卡都可以访问网络程序。
● 案例2、伟大的ASP.Net,可以在访问者磁盘中创建木马文件
● File.WriteAllText("c:/muma.exe", "木马(){葵花点穴手();降龙十八掌();熊猫烧香();}");
● 用CassiniDev.exe启动测试程序让学生们远程测试(VS内置的服务器不能远程访问)。exe生成到了服务器的磁盘中,而不是访问者的磁盘中,因为C#代码是运行在服务器中的,而不是浏览器中的,浏览器得到的只有返回的HTML内容
● 案例3、开两个页面分别访问点击自增1的界面,互不影响。因为状态是保存在页面的ViewState中的。

 

9.3 原则二


● 能在浏览器端完成的事情,就不要到服务端去做。
● 按钮隐藏一个控件就不要写服务端代码,在客户端用JavaScript、dom来操作就可以。比如要操作数据库,显然是在浏览器端做不到的,这时候就要写服务端代码。校验用户名、密码这样的操作可以放到浏览器端(用户名、密码是写死的),技术上可以,但是这样安全性太差,因此必须放到服务器端。

 

9.4 原则3


• 客户端是不可信的。
• 客户端验证不能代替服务端验证
• 不要把敏感数据、算法写在客户端
• 不要把机密信息在html中隐藏的方式来保证安全
• 应该是在机密页面打开之前做权限校验,而不是在一个页面中做校验,如果正确就倒向机密页面,不正确就不导向。
• 不要轻信用户提交上来的数据

 

9.4.1 客户端验证不能代替服务端验证

客户端校验.aspx

<form id="form1" runat="server" onsubmit="if(parseInt(document.getElementById('TextBox1').value,10)>100){alert('最多只能取款100元');return false;}"><div><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div></form>
设置取款金额不能高于100元 
• 客户端:<form id="form1" runat="server" οnsubmit="if(parseInt(document.getElementById('TextBox1').value,10)>100){alert('最多只能取款100元');return false;}"> 
• 服务器端:Label1.Text = "取款成功,金额:"+TextBox1.Text; 
• <asp:Button来讲,onclick是服务端事件,OnClientClick是最终生成到客户端浏览器中的onclick代码。 
image 

• 如果禁用JavaScript(Internet选项→安全→自定义级别→脚本→活动脚本→禁用,可以用“开发人员工具”),那么客户端JavaScript校验就被禁用了,就可以取款多于100元了。 
• 在服务端也要进行数据校验,代码见备注。

客户端校验.aspx.cs

protected void Button1_Click(object sender, EventArgs e){if (Convert.ToInt32(TextBox1.Text) > 100){this.Label1.Text = "禁止取款大于100";}else{this.Label1.Text = "取款成功" + TextBox1.Text + "";}}
imageimage

客户端校验是为了很好的客户端体验,服务器端校验是最后一次把关,防止恶意请求。后面要讲的ASP.Net Validation就是ASP.Net内置的数据校验技术,会在客户端和服务器端同时校验

转载于:https://www.cnblogs.com/tangge/archive/2013/04/24/3041038.html

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

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

相关文章

重置手机_【轻松办税】ITS客户端申报密码重置不会操作?看过来,3分钟包你会!...

ITS扣缴客户端实名办税功能已经上线了&#xff0c;并且在2020年1月1日后将不再支持以CA方式进行登录&#xff0c;可是公司申报密码是很久前去大厅办理的&#xff0c;早就忘记了&#xff0c;这可咋好&#xff1f;别急&#xff0c;快来关注“上海税务”&#xff0c;包你3分钟学会…

Drools 6.2.0.Final发布

我们很高兴宣布最新&#xff0c;最出色的Drools 6.2.0.Final版本。 特别是此发行版更加注重改进的可用性和功能&#xff0c;这些功能使项目更易于使用&#xff08;和采用&#xff09;。 新功能包括对工作台UI的大量改进&#xff0c;对社交活动和插件管理的支持以及规则的全新E…

对OIM Web(UI)层进行压力测试

Oracle IDM中的默认配置保留20个专用于服务前端&#xff08;UI&#xff09;请求的线程 。 从根本上讲&#xff0c;这意味着应用程序服务器具有20个线程池&#xff0c;可用于为通过Web控制台&#xff08;/ identity或/ sysadmin&#xff09;访问OIM的用户提供服务。 对于Weblog…

java 拼接html_程序员用1.5小时写出的Java代码,让同事瞠目结舌!直呼优秀

1.曾经不止一次在生产中见过类似这样的代码&#xff1a;这有很多变种&#xff0c;例如用 Integer.valueOf(1)、 (Integer)1 之类的&#xff0c;那些细节都不重要。重要的是&#xff1a;凭空用一个 Integer 对象作为锁对象。2.AbstractComponentBuilderTemplateFactory3.HelloWo…

本地项目antd 修改.less文件导致内存溢出

项目场景&#xff1a; antd 项目&#xff0c;修改less文件会导致内存溢出 问题描述 本地环境antd 项目&#xff0c;修改less文件会导致内存溢出&#xff1b;如下 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory原因分析&#xff1a; 这…

序列化代理模式

在上一篇文章中 &#xff0c;我谈到了一般的序列化。 这是更加集中的内容&#xff0c;并提供了一个细节&#xff1a; 序列化代理模式 。 这是处理序列化许多问题的一种好方法&#xff0c;通常是最好的方法。 如果开发人员只想了解有关该主题的一件事&#xff0c;我会告诉他。 …

函数分组学通MongoDB——第三天 细说高级操作

改章节个人在广东喝咖啡的时候突然想到的...明天就有想写几篇关于函数分组的文章&#xff0c;所以回家到后之就奋笔疾书的写出来发布了 明天跟大家分享一下mongodb中比拟好玩的识知&#xff0c;要主括包&#xff1a;聚合&#xff0c;标游。 一&#xff1a; 聚合 见常的聚合作操…

eps如何建立立体白模_服装立体裁剪教程 结构都是“立裁”出来的 才智服装

核心提示&#xff1a;基础立裁服装立体裁剪是指用白坯布为常用替代物&#xff0c;在人台上直接塑造服装样式&#xff0c;并进行样板制作的技术。由于立体裁剪是设计师主要依靠视觉进行的直观操作的过程&#xff0c;所以它具有激发和展开新的设计思维的功能。一、基础立裁服装立…

平衡抽象原理

使代码复杂易读和理解的一件事是&#xff0c;方法内部的指令处于不同的抽象级别。 假设我们的应用程序仅允许登录用户查看其朋友的旅行。 如果用户不是朋友&#xff0c;则不会显示任何行程。 一个例子&#xff1a; public List<Trip> tripsByFriend(User user, User l…

IntelliJ IDEA内部设计

IntelliJ IDEA的第一版于2001年1月发布&#xff0c;当时它是第一个集成了高级代码导航和代码重构功能的Java IDE之一。 2009年&#xff0c;JetBrains开源了其社区版本 。 从那时起&#xff0c;创建了许多基于它的IDE&#xff0c;例如Google的Android Studio。 让我们使用JArc…

TDD:MS自带的单元测试 之 线程模型和执行顺序

背景 我一直在呼喊“不要靠假设编程”&#xff0c;可是我却常常这么做。我用单元测试就是一种基于假设进行编程的反面教材&#xff0c;今天就下决心弄明白它。 主要想弄明白两个问题&#xff1a; 执行的所有单元测试方法的线程模型&#xff0c;是单线程&#xff1f;是多线程&am…

bat文件名操作_Excel按文件名制作目录,你复制粘贴花一小时,同事只要十秒搞定...

Excel有个特殊操作&#xff0c;那就是对文件夹中上百个文件&#xff0c;用Excel按照文件名制作目录&#xff0c;我们只需要点击对于的超链接就可以快速打开对于的文件。如上图所示&#xff0c;我们的文件夹中包含有26个视频和Excel文件&#xff0c;因为文件数量过多所以我们需要…

整数返回poj1005——I Think I Need a Houseboat

这两天一直在研究整数返回之类的问题,上午正好有机会和大家讨论一下. 原题&#xff1a; Description Fred Mapper is considering purchasing some land in Louisiana to build his house on. In the process of investigating the land, he learned that the state of Louisia…

偷窥JCache API(JSR 107)

这篇文章从较高的层次介绍了JCache API&#xff0c;并提供了一个预告片–刚够您&#xff08;希望&#xff09;开始对此发痒&#xff1b;-) 在这篇文章中...。 JCache概述 JCache API&#xff0c;实现 JCache API支持的&#xff08;Java&#xff09;平台 快速了解Oracle Coh…

canvas 圆角矩形填充_一篇文章让你学会你最“害怕”的Canvas,太有意思了

Canvas画布 基本用法<canvas idcanvas width"150" height"150"></canvas> <canvas>看起来跟img标签有点像&#xff0c;唯一不同的是它没有src属性和alt属性。实际上&#xff0c;canvas标签只有两个属性:width和height。 如果没有设置宽度…

abaqus单位_ANSYS和ABAQUS哪个好,一个例子告诉你

分别用ANSYS和ABAQUS来分析同一个题目并考察其异同点。【问题】一根悬臂梁&#xff0c;长200mm,截面是30mm*20mm的矩形(高度方向是20mm)。该梁左端固定&#xff0c;在其上面施加向下的分布力系&#xff0c;载荷集度是0.6Mpa.已知材料使用低碳钢&#xff0c;弹性模量是200GPA&am…

模型微调入门介绍一

备注&#xff1a;模型微调系列的博客部分内容来源于极客时间大模型微调训练营素材&#xff0c;撰写模型微调一系列博客&#xff0c;主要是期望把训练营的内容内化成自己的知识&#xff0c;我自己写的这一系列博客除了采纳部分训练营的内容外&#xff0c;还会扩展细化某些具体细…

npp夜光数据介绍 viirs_科研成果快报第177期:中国地区长时序AVHRR气溶胶数据的主要问题: 气溶胶反演频次与重污染天气...

中国地区长时序AVHRR气溶胶数据的主要问题&#xff1a;气溶胶反演频次与重污染天气A critical view of long-term AVHRR aerosol data record in China: Retrieval frequency and heavy pollution成果信息Minghui Tao, Rong Li, Lili Wang et al. (2020)A critical view of lon…

使用Eclipse创建一个Android程序方法

要编写Android程序&#xff0c;需要安装JDK、Eclipse和Android SDK。 Android SDK的安装路径不要在program file或program file(x86)下&#xff0c;否则在debug时会碰很奇怪的问题。最好直接放在C:\Android下。&#xff08;如果非要放在Program files下也可以&#xff0c;在ecl…

如何使用Hibernate批处理DELETE语句

介绍 在我以前的文章中 &#xff0c;我解释了批处理INSERT和UPDATE语句所需的Hibernate配置。 这篇文章将继续本主题的DELETE语句批处理。 领域模型实体 我们将从以下实体模型开始&#xff1a; Post实体与Comment具有一对多关联&#xff0c;并且与PostDetails实体具有一对一…