WEB 面试题(五) ASP.NET 基础

86.三层架构
a.通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。 区分层次的目的即为了“高内聚,低耦合”的思想。
b.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候的所见所得
c.业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理
d.数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系
e.三层结构是 N 层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化
f.优点:分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本
87.B/S与C/S的联系与区别
a.C/S 是 Client/Server 的缩写。客户端需要安装专用的客户端软件。
b.B/S是 Brower/Server 的缩写,客户机上只要安装一个浏览器。在这种结构下,用户界面 完全通过 WWW 浏览器实现,一部分事务逻辑在前端实现,但是主要逻辑在服务器端 实现。浏览器通过WebServer 同数据库进行数据交互。
C/S 与 B/S 区别:
c.硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务 器提供连接和数据交换服务. B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比 C/S 更强的适应范围, 一般只要有操作系统和浏览器就行
d.对安全要求不同 C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信 息系统采用 C/S 结构适宜. 可以通过 B/S 发布部分可公开信息. B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户
e.处理问题不同 C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相 关. 应该都是相同的系统。C/S 的客户端由于是本地程序,因此和本地硬件、程序的交 互性很强,比如可以控制本机的其他程序、可以读写本地磁盘文件、可以与硬件交互。 B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作 系统平台关系最小,正应为如此 B/S 很难和本地硬件、程序、文件进行交互,比如很 难控制本机的其他程序、很难读写本地磁盘文件、很难与硬件交互,当然可以用ActiveX 技术解决,比如网银等就是这么解决的,这样做的问题就是可能会被客户拒绝,而且 只局限于 Windows 操作系统。
f.C/S 也分为两层架构和三层架构。两层架构:客户端程序程序直连数据库;三层架构: 客户端访问服务端的服务,主要逻辑代码写在服务端的服务中,然后服务端服务再去访问数据库,Oracle版分布式呼叫中心,WCF。
88.什么是受管制的代码?什么是托管代码?
a.在.Net 环境中运行的任何代码都是受管制的代码(managedcode)
b.Net 外部的代码也运行在 windows上,这些代码称为未受管制的代码(unmanagedcode)
c.使用基于公共语言运行库的语言编译器开发的代码称为托管代码
d.托管代码具有许多优点, 例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
89.什么是code-Behind技术?
a.就是代码隐藏,在 ASP.NET 中通过 ASPX 页面指向 CS 文件的方法实现显示逻辑和处理逻 辑的分离,这样有助于 web 应用程序的创建
b.比如分工,美工和编程的可以个干各的,不用再像以前 asp 那样都代码和 html 代码混在一起,难以维护
90.请解释 ASP.NET中的Web页面与其隐藏类之间的关系?
a.一个ASP.NET页面一般都对应一个隐藏类
b.一般都在ASP.NET页面的声明中指定了隐藏类例如一个页面 Tst1.aspx 的页面声明如下
<%@ Page language=“c#” Codebehind=“Tst1.aspx.cs” AutoEventWireup=“false” Inherits=“T1.Tst1”%>
c.Codebehind=“Tst1.aspx.cs” 表明经编译此页面时使用哪一个代码文件
d.Inherits=“T1.Tst1” 表用运行时使用哪一个隐藏类
91.什么viewstate,能否禁用?是否所用控件都可以禁用?
a.Viewstate 是保存状态的一种机制,EnableViewState 属性设置为 false 即可禁用。(最有力的举 例子:Label、TextBox 在禁用 ViewState 后不同的表现来说明)
92.什么是 WEB 服务控件?使用 WEB 服务控件有那些优势、劣势?
a.web 服务控件就是可以在服务器执行的控件,优势在于可以回传数据(ViewState),带有事件驱 动(doPostBack),简化了 Html 标签的使用,使得开发 ASP.net 程序可以像开发 Winform 程序一 样简单。Web 服务控件最终还是被渲染(Render)为 Html 标签
b.使用 WEB 服务控件的劣势是会生 成一些无用的属性、ViewState 等,不利于 SEO,一般在内网系统或者互联网系统的后台中使用 WEB 服务控件。如果没有复杂的服务器交互动作,就不用 Web 服务器控件。
c.runat=server的HTML 控件有什么特点:路径不用程序员解析,可以使用“~”来虚拟路径。
93.列举 ASP.NET页面之间传递值的几种方式
a.使用 QueryString, 如…?id=1;response.Redirect()…
b.使用 Session 变量
c.使用 Server.Transfer
d.Cookie 传值
e.Application 传值
f.PreviosPage
g.Server.Transfer 和 Response.Redirect 的区别:Server.Transfer 是服务器内部的转接,浏览器不知晓; Response.Redirect 是有浏览器参与的,所以在地址栏中可以看到地址的变化。
h.扩展:
Server.Transfer 仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect 则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
Server.Transfer 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。这个过程中浏览器和Web服务器之间经过了一次交互。 Response.Redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web 服务器之间经过了两次交互
94.通过超链接怎样传递中文参数?
a.用 URL 编码
b.通过 QueryString 传递
c.用 urlencode 编码,用 urldecode 解码
95.Session,ViewState,Application,cookie的区别?
a.Session:用于保持状态的基于 Web 服务器的方法。Session 允许通过将对象存储在Web 服务器的内存中在整个用户会话过程中保持任何对象。主要用于保持代码隐藏类中对象的状态。为每个用户创建的,用于存储单个用户,因为他是相对每个用户的.所以可能来取得在线人数等。
b.ViewState:主要用于保持 Web 页上控件的状态。当 Web 页上的控件被绑定到代码隐藏类中的对象。
c.Application 用于存储所有用户都可视的信息.所以它存储的是要让所有用户共享的一些信息.如总访问数等Cache,页面缓存。
d.Cookie:通常我们都把它放在客户端,也可以存储在服务器端。主要用它存储用户的个性设制,和登录信息。
96.post、get的区别?
a.get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中
b.使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而get则不会
c.用get的页面可以被搜索引擎抓取,而用post的则不可以
d.用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度
e.用post可以进行文件的提交,而用get则不可以
f.扩展:通过html表单方式提交数据和ajax方式请求的原理不一样:不完百全一样。一般通过Form方式度提交的数据会设置特殊的Content-问Type:application/x-www-form-urlencoded,也会改变location。而通过Ajax请求可以答自定义请求体类型Content-Type,它的请专求头部会设置“属Connection”为”Keep-Alive”
97.Asp.net中的错误机制?
a.定制错误页来将显示一个友好的报错页面。
b.页面中未捕获一样会触发Page_Error,应用程序中的未捕获异常会触发Application_Error。通过HttpContext.Current.Server.GetLastError()拿到未捕捉异常,记录到Log4Net日志中。
98.网站想要实现文件防盗链的功能,说说你的解决方案?
a.读取HTTP报文头中的UrlReferrer在Application_BeginRequest中我们可以判断用户的请求是否来源于本网站,如果不是我们可以终止用户的请求(Response.End();)
99.序列化有何作用?
a.通过流类型可以方便地操作各种字节流,但如何把现有的实例对象转换为方便传输的字节流,就需要用到序列化的技术
100.什么是SQL注入式攻击?
a.所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。
b.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
c.常见的SQL注入式攻击过程例如:
(1)某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。
(2)登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:
System.Text.StringBuilder query = new System.Text.StringBuilder(“SELECT * from Users WHERE login = '”)
Append(txtLogin.Text).Append("’ AND password=’")
Append(txtPassword.Text).Append("’")
(3)攻击者在用户名字和密码输入框中输入"‘或’1’='1"之类的内容。
(4)用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = ‘’ or ‘1’=‘1’ AND password = ‘’ or ‘1’=‘1’。
(5)服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比
(6)由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者
d.如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限
e.系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表
101.如何防范SQL注入式攻击?
a. 利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。
b.对于动态构造SQL查询的场合,可以使用下面的技术
c.用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了
d.限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度
e.检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。扩展:在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如 RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个
f.将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了"消毒"处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。 System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理
检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值