ASP.NET初级学习2

HTTP协议简介

1.web开发是和http协议打交道的,必须了解http协议。http协议版本:http/0.9http/1.0http/1.1版本

http协议分析工具

1.DebugBarHttp(s)标签的内容。免费的,只能分析当前浏览器中的内容。

HttpWatch,收费的,也是只能分析当前浏览器的内容。推荐使用。

http协议的几个概念:

1.      连接(connection):浏览器和服务器之间传输数据的通道,一般请求完毕就关闭,不会保持连接

2.      请求(Request):浏览器向服务器发送的“我要。。”的消息,包含请求的类型,请求的数据、浏览器的信息(语言、浏览器的版本等)

3.      相应(Response):服务器对浏览器请求的返回的数据,包含是否成功,错误码等。

Http响应码 浏览器向服务器发出请求,服务器处理可能是成功,可能是失败、可能没有权限访问等原因,服务器会通过响应码来告诉浏览器处理结果。

HTTP/1.1 200 OK 200是状态码:表示请求处理成功。

301表示永久转移。    302 Found暂时转移   400  错误请求 发出不符合http协议的请求

 404 页面找不到。     307 临时重定向       401 未认证  一般需要输入用户名密码才能登录

 500内部服务器错误。 403 :Forbidden 禁止访问

网页中如果有图片,css,js等外部文件的话,图片,css,js都在单独的请求中,也就是并不是页面的所有内容都在一个请求中完成,而是每一个资源一个请求。

一般情况下,只有浏览器请求服务器端,服务器端才有给浏览器相应数据,不会主动向浏览器推送数据,这样是安全考虑,也是提高服务器的性能。如果要服务器像客户端浏览器推送数据,则需要使用ServerPush等额外技术。

http是“请求—响应”工作方式,因此页面会不断的刷新,如果不希望页面刷新则要使用AJAX等技术。

多线程下载基于断点续传。

请求响应模型的例子

超链接和提交表单的区别,一个是直接访问,一个是有postback。

 

Web开发的一些基本原则

1.最小权限原则。只允许用户做***,而不是“不允许用户做***”

2.浏览器看、查看的是服务器端代码的执行输出的文本,除非服务器有漏洞,否则浏览者无法看到服务器端的aspx、cs代码,目标另存为也是保存的aspx的执行结果,而不是aspx的源代码。Js、html是被初入到浏览器上执行的,因此无法禁止浏览者查看js、html。

 C#代码是运行在服务器端的,js代码是运行在浏览器端的。可以在客户端执行的代码就放在客户端执行,例如按钮确认提交在button的onclientclick="return confirm('真的要删除吗?')。运行在浏览器端。

还有一种看起来像是在服务器端弹出对话框。但其实也是在浏览器中执行的:

Response.Write(“<script>alert(‘删除成功!’)</script>”);其实这段代码,是在服务器端将段字符串写到浏览器中的,浏览器执行时识别出这是JavaScript代码,就弹框了。其实服务器端根本不知道这是一句弹框代码,也不会阻塞服务器端代码继续执行下去。(不推荐使用,推荐使用RegisterClientStartupScript)

真正在服务器端弹出对话框也没有意义:比如:DialogResult dr= MessageBox.Show("服务器端弹出?对话框,要先添加winForm的引用,怎么我上次那么傻呢!这样都没想到。","傻逼?",MessageBoxButtons.YesNo);

为什么会没有意义呢?很简单,我们的网站是供人访问的,但是如果每次访问后弹出的提示框都在服务器端,那么客户端根本就不会知道,而且服务器端也会因为弹出太多的框框而卡死!!

按钮隐藏一个控件就不要写服务器端代码,在客户端用JavaScript、dom来操作就可以。校验用户名,密码这样的操作可以放到浏览器端,但是安全性差,因此还是必须放到服务器端。

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

像网银金额校验,不单单在客户端要校验,服务器端也要校验,客户端校验是为了很好的客户体验,快速发现问题,不必要再执行下去,服务器端是最后一次把关,防止恶意请求

不要把敏感数据,算法写在浏览器端

不要把机密信息保存在html

服务器端的控件visible=false时,控件定义根本不会画到客户端浏览器中,而客户端控件则不同,只是把display属性设为none

 

XSS漏洞

不要在一个页面中直接请求一个字符串然后显示成html代码。你可以将请求的字符串经过html编码后显示出来,而不是让他执行html代码

用户发贴时也存在xss的问题。将发帖内容保存到一个文本文件中。

我们可以对请求的数据做检测,如果请求数据中有<等就认为是恶意攻击,禁止提交,aspx默认就是才用这种策略,这样做的缺点是不能在论坛中html代码的帖子,这样不好。

  因此,更好的处理方法是将html内容原样显示出来,而不是以html的方式显示出来。使用HttpUtility HtmlEncode就可以将字符串中的特殊字符串显示出来,也就是不把<script>当成定义脚本的标签,而是当成&lt;script&gt;这样可以在页面中直接显示出来的内容。

原文地址:https://www.cnblogs.com/YangFengHui/p/2018588.html