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,一经查实,立即删除!

相关文章

Spring配置文件简介

这么多的人&#xff0c;那么多的思想。 当我们为不同的客户实施软件时&#xff0c;有时我们需要处理同一项目的各种需求。 例如&#xff0c;客户A需要SAML身份验证&#xff0c;客户B需要LDAP身份验证。 借助Spring Profiles&#xff08;可从Spring 3.1获得&#xff09;&#x…

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

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

vuex mapGetters使用

// formStatisticsFoundation.js &#xff0c;命名空间为formStatisticsFoundation getters: {zzStatisticsData(state) {const statisticsData state.statisticsData;const data [{name: 企业数,number: statisticsData.enterpriseNumber},{name: 品种数,number: statistic…

Ubuntu各大分支版本功能介绍及下载地址

Ubuntu目标&#xff1a;&#xff08;摘自官网&#xff09;快速&#xff0c;免费&#xff0c;易用。特色&#xff1a;带有上千种免费的开源应用软件&#xff0c;支持各种电脑文件设备、打印机、数码相机、音乐播放器和智能手机。每年的4月和10月都会发布一个新版本。官方网站&am…

数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...

在弯管机加工中,由管子模型生成可直接进行弯管加工的YBC数据可以大大提高弯管编程过程.传统的做法是先用dxf数据文件(用autocad绘制管子的轴心线数据)转出XYZ数据,然后由XYZ数据转成YBC数据,而且大部分厂家对文件版本以及软件做管方式都有不少限制,这大大花费了用户的时间跟精力…

使用rx-java的异步抽象

对我而言&#xff0c;使用Rx-java的最大好处之一就是无论底层调用是同步还是异步&#xff0c;因此代码看起来都完全相同&#xff0c;因此该条目的标题也是如此。 考虑一个非常简单的客户端代码用例&#xff0c;它执行三个缓慢运行的调用并将结果合并到一个列表中&#xff1a; …

js Math函数

在控制台直接打印console.dir(Math)看全部方法. 属性 Math.E //2.718281828459045 自然对数的底数 这是高中知识&#xff1f; Math.LN2 // 0.6931471805599453 Math.LN10 // 2.302585092994046 Math.LOG2E // 1.4426950408889634 Math.LOG10E // 0.4342944819032518 Math.P…

jenkins修改pom文件_jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?...

针对这个问题&#xff0c;构建方法不变&#xff0c; 变化在动态去获取每次打出来的包名&#xff0c;比如说&#xff0c;本次打出来的报名mypackage-1.0.3-SNAPSHOT.jar那么&#xff0c;先进入target目录#先进入target目录cd /root/.jenkins/workspace/${JOB_NAME}/XXXXXX/targe…

Mysql Incorrect DATETIME value: ‘01/01/2021 00:00:00‘

服务器时间格式不一致&#xff0c;转换时间格式 start.ToString("yyyy-MM-dd HH:mm:ss")

Drools 6.2.0.Final发布

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

指针(pointers)和引用(references)区别

指针用“*”和“->”操作符&#xff0c;引用用"."操作符&#xff0c;当然这是表面的区别。 引用必须代表一个对象&#xff0c;没有所谓的空引用。指针可以为NULL。即引用必须有初值&#xff0c;指针不然。所以在使用pointers之前&#xff0c;必须测试它是否为null…

网件刷breed_斐讯K2刷不死breed加padavan华硕固件教程

之前一直对斐讯的这个免费送路由活动没太多兴趣&#xff0c;因为为了几个廉价路由出卖个人信息我本身是有点抵触的。但是刚好最近搬家而原来的路由宝的信号无法达到我的需求而准备买一台新的无线路由。其实在买K2前确实也纠结过&#xff0c;因为或多或少要出卖一点个人信息&…

必读:Java Java

他们没有在Comp Sci&#xff0c;工程学或MIS中教appsec&#xff0c;但是您却学会了编程。 而且他们可能仍然没有。 因此&#xff0c;您将如何得知XSS过滤器规避或点击劫持攻击&#xff0c;或如何真正安全地存储密码。 您的公司无力为您提供昂贵的Appsec培训&#xff0c;而且您…

函数重载 覆盖 隐藏

重载overload 函数名相同&#xff0c;但形参的个数或形参的类型不同。 仅返回值不同&#xff0c;不能定义为重载函数。 class Base { public:void baseFun(int) { cout << "baseFun(int) in Base" << endl; }void baseFun(double) { cout << "…

linux+svn+拉取版本_在linux客户端下管理svn版本库

把linux作为客户端管理svn版本库&#xff0c;不一定是svn服务器。1.svn管理命令用法&#xff1a;[rootxiaoyu ~]# svn --helpusage: svn [opations] [args]Subversion command-line client, version 1.7.14.Type svn help for help on a specific subcommand.Type svn --versi…

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

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

umi config.js整体defineConfig配置

import { defineConfig } from umi;export default defineConfig({hash: true, // 配置是否让生成的文件包含 hash 后缀&#xff0c;通常用于增量发布和避免浏览器加载缓存。history: { // 配置 history 类型和配置项type: hash // 可选 browser、hash 和 memory},base: /, // …

在 Yii框架中使用session 的笔记:

在 Yii框架中使用session 的笔记&#xff1a; 首先&#xff0c;在Yii框架中&#xff0c;你不需要像标准PHP代码那样使用session_start(),在Yii框架中&#xff0c;autoStart 属性缺省被设置为true&#xff0c;所以&#xff0c;虽然没有使用session_start(),你仍然可以使用$_SESS…

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; 这…