一、ASP.NET页面Page指令的Codebehind、Inherits属性
查看aspx页面的HTML代码,在第一行你可以发现:
<%@ Page language="c#" Codebehind="SignIn.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.SignIn" %>
很有必要介绍一下Codebehind属性和Inherits属性。ASP.NET较之ASP一个最大的进步,就是实现了Web开发中HTML 代码(负责呈现用户界面)和程序代码(负责实现业务逻辑)的分离。
ASP.NET页面在运行时,首先时被解释加以编译成为一个类,这个类继承了Inherits属性指定的预先编译在程序集中的类,然后ASP.NET页面编译后生成的类被启动来处理请求(注意:继承的方式在ASP.NET2.0中已被取消,在2.0版本中,页面连同程序代码编译成同一类)。
二、服务器控件
在ASP.NET中,服务器控件具有在服务器上可见并可编程的属性。可以直接使用ASP.NET服务器控件,也可以通过将 HTML 元素转换为 HTML 服务器控件,将其公开为可在服务器上编程的元素,这使得我们可以使用类似WinForm编程的方法来使用它们
三、ASP.NET页面周期
页面的Page_Load事件在每次页面Postback回服务端后均会触发,值得注意的是,其Page_Load触发时间要先于服务器控件事件(例如按钮的单击事件)。请看下面有关ASP.NET页面的生命周期的简要叙述如下,详情请参见MSDN网站:
1、Initialization-页面初始化(初始化页面及其控件);
2、Load View State-载入视图状态(载入视图状态到页面,视图状态存储了上次访问后页面的状态信息,该事件仅在页面Postback后触发);
3、Load Postback Data-载入返回数据(载入控件被修改的属性信息并予以更新,该事件也仅在页面Postback后触发);
4、Load-载入(即Page_Load事件,该事件发生表示页面已经恢复到上次访问时的状态);
5、Raise Postback Event(那些属性值发生了改变的服务器控件将触发Postback事件,注意,该阶段并未使用视图状态的信息,该事件也仅在页面Postback后触发)
6、Save View State(保存页面的视图状态信息)、
7、Render(产生最终显示给客户端的HTML代码)。
四、Session的安全性和Cookie的安全性问题。
我们知道,HTTP是无状态的,但是Web 应用必须提供对某些跨请求状态信息的维持,最常见的例子就是Web购物站点的购物车,因此所有的Web编程环境均提供了会话(Session)支持。在ASP.NET中,会话都是使用 120 位的 SessionID 字符串进行标识和跟踪的,SessionID 值是使用保证唯一性和随机性的算法(例如MD5算法)生成的,SessionID随机性使得怀有恶意的用户不能使用新的 SessionID 来计算现有会话的 SessionID。
在默认状态下,SessionID是保存在客户端的会话Cookie中的,假如客户端禁用了Cookie,通过设置Web.config文件中的<sessionState>节点的属性cookieless="true",你可以使得SessionID附在URL中。此时,在你的Session有效期内,假如你将你的SessionID(从URL中获得)告诉你的朋友,他就可以使用你的SessionID从其它机器访问同一个Web应用,他将和你同用一个的Session内容。这个情况说明了实现SessionID的唯一性和随机性的原因所在。
SessionID由客户端加以维护,保存在会话Cookie中或URL中。会话状态则由服务端维护,ASP.NET 中有三种会话状态的存储模式。您可以在进程内、状态服务器(StateServer)和 SQL Server 之间选择。具体设置可以参考如下MSDN。
Session是面向用户的,它不能跨 Web 应用程序边界。所谓的在本地自建相同Session就可以访问其他Web站点的说法是无稽之谈。从应用的角度来看,Session是安全的,且无法伪造。但是这并不是说,使用Session的Web站点是绝对安全的,例如当攻击者捕获了身份验证令牌(身份验证令牌保存在 cookie 或 URL 中)并控制了其他用户的会话,则发生会话劫持现象(攻击者在捕获了身份验证令牌后,只要将令牌连同请求一起传递给应用程序,应用程序则将该请求与合法用户的会话相关联)。如下链接http://www.microsoft.com/china/technet/security/guidance/secmod83.mspx专门讨论了如何构建安全ASP.NET站点 。
Cookie是存放在本地的,而且不是加密存放的,所以,不要将重要的信息例如信用卡、密码等资料存放在Cookie中。
五、关于SQL注入攻击
使用动态SQL语句、存储过程、持久层框架访问数据库即可避免SQL注入攻击。只有当你将用户输入不加处理直接构造到你的SQL代码中,SQL注入攻击才会发生。