目录:

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;
}

在客户端生成


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

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

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

并不是真的是在服务器端运行的,只是生成了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代码。 

• 如果禁用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 + "元";}}

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

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

Asp.Net基础 - 9.Web开发原则相关推荐

  1. ASP.NET AJAX 在Web开发中的应用

    摘 要 ASP.NET AJAX 实现了Web页面丰富的部分刷新效果.本文通过介绍AJAX原理,引申到ASP.NET AJAX原理,并总结了在Web 开发应用中要注意的若干问题.合理地利用ASP.NE ...

  2. python学全栈还是运维_Python全栈学习——Python基础及Web开发

    原标题:Python全栈学习--Python基础及Web开发 在DevOps火热的敏捷行业中,无论是开发还是运维都在互联网快速发布下练就了一身的本领,微服务下的敏捷开发体系及智能运维体系都在实战中逐步 ...

  3. 适合0基础的web开发系列教程-换行和水平线

    最近忙于期末考试命题,很久没有更新随笔了. 今天给大家总结的是换行和水平线 <br/> 可插入一个简单的换行符. <hr/> 水平分隔线(horizontal rule)可以在 ...

  4. 适合0基础的web开发系列教程-web 存储

    HTML5 web 存储,一个比cookie更好的本地存储方式. 什么是 HTML5 Web 存储? 使用HTML5可以在本地存储用户的浏览数据. 早些时候,本地存储使用的是 cookie.但是Web ...

  5. ASP.NET基础教程-Web 自定义控件的使用-根据属性值从数据库中提取数据并在页面上自动生成一个表格...

    一.新建一个Web 控件库; 二.在WebCustomControl1.cs文件中编制如下代码: using System; using System.Web.UI; using System.Web ...

  6. python web开发基础_python web开发基本概念

    参考了廖雪峰的Python博客. web请求顺序: 浏览器发送一个http请求 服务器收到请求后,生成一个html文档. 服务器将html文档作为http相应的body发送给浏览器 浏览器收到http ...

  7. 适合0基础的web开发系列教程-文本格式标签汇总

    html标签主要是起结构的作用,布局的效果主要靠css完成,比如颜色.背景.字体大小.对齐等. 不过html标签中也有一些常用的文本格式化标签,能对文本内容进行简单的格式设置. 比如加粗文字.定义斜体 ...

  8. 适合0基础的web开发系列教程-canvas

    1.在学习canvas之前,一定要安装一个高级浏览器,推荐最新版本的chrome.因为不是每个版本的浏览器都支持canvas. 2.canvas是用来在网页中绘图的,可以通过javascript程序在 ...

  9. 你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得

    大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区.

最新文章

  1. 测试oracle删除干净,彻底卸载Oracle
  2. 美酒换咖啡用java编写_Java 配 Shell 等于美酒加咖啡
  3. 第九章 神经网络学习-机器学习老师板书-斯坦福吴恩达教授
  4. 关于全局ID,雪花(snowflake)算法的说明
  5. Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
  6. Hadoop相关技术
  7. jquery 全选获取值
  8. C语言中总是从main函数开始执行函数吗?
  9. 保证MQ消费消息的幂等性,真可以用版本号的方式?
  10. 二进制样式的字符串与byte数组互转函数示例
  11. unity3d:激活码系统(根据PC机器码,给对应激活码完成软件注册)
  12. 精忠报国用计算机弹,同人精忠报国岳飞传
  13. BLOB/TEXT column ‘h_long_varbinary‘ used in key specification without a key length
  14. \xe5\x8d\xa0\xe7\x94\xa8\xe3\x80\x82,16进制乱码转化为可读字符
  15. SQL之累积计算问题--HQL面试题1
  16. 从本质如何理解机器学习
  17. 【国集作业】【AGC004E】Salvage Robots 【DP】
  18. 技术分享 | 学做测试平台开发-Vuetify 框架
  19. [BZOJ4668]冷战
  20. EXFO 光时反射仪MAX-730C-SM1基本规格

热门文章

  1. java iterator获取索引_2020年Java面试题最新整理(1625)
  2. C 的16个大坑,你能躲过几个?
  3. vant按需引入没样式_vue vant-ui样式出不来的问题
  4. 纯净pe工具_微PE工具箱2.0
  5. 【渝粤教育】国家开放大学2018年春季 7218-21T医学伦理学(本) 参考试题
  6. 【渝粤教育】国家开放大学2018年春季 8622-22T社会调查研究与方法 参考试题
  7. 【渝粤教育】国家开放大学2018年秋季 0680-22T会计基础知识 参考试题
  8. 【渝粤题库】陕西师范大学700005 遗传学
  9. layui datetimepicker 只日期范围到当前时间的前一天_浪琴手表如何正确调整日期?手表调日期的方法...
  10. 集团bim对集团项目服务器,BIM再添一员,五洋建设集团BIM项目组举行成立仪式