ASP.NET 安全续2

本文详细介绍了ASP.NET中的窗体身份验证机制,包括如何通过自定义验证逻辑实现用户登录,以及如何配置应用程序来支持这种认证方式。同时,文中也讨论了窗体身份验证的安全性问题及可能的改进措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 使用窗体身份验证
        但是只保护.aspx,.asmx,.ashx。但不包括普通的HTML页面或经典asp 页面。
        
Void LogonUser(object sender, EventArgs e)
{
    
string user = userName.Text;
    
string pswd = passWord.Text;
    
//Custom authentication
    bool bAuthenticated = AuthenticateUser(user,pswd);
    
if (bAuthenticated)
        FormsAuthentication.RedirectFromLoginPage(user,
false);
    
else
        errorMsg.Text 
= "Sorry,yours seems not to be a valid account.";
 对用户进行身份验证:   
private bool AuthenticateUser(string username, string pswd)
    
{
        
// Performs authentication here 
        string connString = ConfigurationManager.ConnectionStrings["LocalNWind"].ConnectionString;
        
string cmdText = "SELECT COUNT(*) FROM employees WHERE firstname=@user AND lastname=@pswd";

        
int found = 0;
        
using (SqlConnection conn = new SqlConnection(connString))
        
{
            SqlCommand cmd 
= new SqlCommand(cmdText, conn);
            cmd.Parameters.Add(
"@user", SqlDbType.VarChar, 10).Value = username;
            cmd.Parameters.Add(
"@pswd", SqlDbType.VarChar, 20).Value = pswd;
            conn.Open();
            found 
= (int)cmd.ExecuteScalar();
            conn.Close();
        }

        
return (found > 0);
    }
  
 强密码支持:
            
SELECT COUNT(*FROM employees WHERE
    
CAST(RTRIM(firstname) AS VarBinary)=CAST(RTRIM(@userAS VarBinary)
    
AND
    
CAST(RTRIM(lastname) AS VarBinary)= CAST(RTRIM(@paswdAS VarBinary)
 
窗体身份验证的配置
  1、<forms>节
 
<forms name="cookies" loginUrl="url" 
protection
="All|None|Encryption|Validation" 
timeout
="30" requireSSL="true|false" path="/"
 slidingExpiration
="true|false" 
 enableCrossAppsRedirects
="true|false"
 cookieless
="UseCookies|useUri|AutoDetect|UseDeviceProfile" defaultUrl="url" domain="string">
</forms>
Asp.NET2.0中的无cookie窗体身份验证
      对一个经过身份验证的用户,为他提供服务的页面的URL,遵循如下所示的模式:
http://YourApp/(F(XYZ1234))/samples/default.aspx
票被正确地编码成一个符合URL标准的字符,并正好插入URL中的服务器名称后面。无cookie身份验证要求用一个ISAPI筛选器来截取该请求,提取票据,并把正确的路径重新写入应用程序。该筛选器还作为另一个请求头提供身份验证票据。使用aspnet_filter.dll组件来解析URL。为了避免混淆,URL中填充的每种额外信息用惟一的限定符进行封装:会话ID用S(...),身份验证票据用F(...)。筛选器提取URL装饰,并把票据信息放入一个名为AspAuthenticationTicket的头中。
  窗体验证是不安全的。1、用户票据以明文的形式发出,SSL可以用来保护通信,但是最终,窗体身份验证和IIS基本身份验证一样弱。所以一个盗取的身份验证cookie只要它有效,那就可以用来计划重放攻击。但是如果使用无cookie解决方案则无法解决此问题。
  窗体身份验证基于程序代码。可以在程序代码级加强身份验证。这可以用Asp.NET2.0的成员资格API来加强。
  所以综上所述,Microsoft的窗体验证方式还是不安全的,尽管可以在代码级加强程序的安全性,但是你的基础是脆弱的,就像楼下开着门,你加固楼上的窗户来防小偷一样的,觉得很可笑的。所以还是要加强对于窗体身份验证的票据的保护的问题。如果使用 cookies可以用缩短其有效期,比如说立即过期来加强;如果不是用cookies,那么既使加密了也是没有办法的,这可以自己做一个加密的的函数来执行。在程序中采用一种计算方法,到那边再进行验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值