天天看點

關于web應用程式的安全驗證

       通常對于一般的web應用程式,都是自己寫驗證,輸入使用者名和密碼,然後到資料庫去驗證,然後傳回。但是對于安全性要求較高的應用,自己寫的安全驗證則會出現許多沒考慮到的地方,這時應該使用安全架構。

        我使用的是struts架構,伺服器是weblogic8.14,配置了基于FORM的驗證方式,具體配置如下:

        1、目錄結構:根目錄檔案:index.jsp,login.html,error.jsp

                                  admin目錄:存放系統子產品業務頁面的路徑

                                  pages目錄:存放公用頁面的路徑

         2、login.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">

<html xmlns="[url]http://www.w3.org/1999/xhtml[/url]">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<style type="text/css">

body{

 margin:0;

 font-size:12px;

 height:100%;

}

#content {

 position:absolute;

 left:58%;

 top:42%;

 width:190px;

 height:104px;

 z-index:1;

.int{

 width:120px;

 height:13px;

 border:#c0c0c0 1px solid;

.btn{padding-top:2px;}

</style>

</head>

<body>

<div id="content">

  <table width="100%" border="0" cellspacing="0" cellpadding="0">

    <form  method="post" action="j_security_check">

 <tr>

   <td height="25" colspan="2" align="right" valign="bottom">&nbsp;</td>

   </tr>

      <td width="60" height="35" align="right" valign="bottom">使用者id:</td>

      <td width="120" valign="bottom"><input type="text" name="j_username"  id="j_username" class="int"/></td>

    </tr>

    <tr>

      <td width="60" height="25" align="right" valign="bottom">密碼:</td>

      <td valign="bottom"><input type="password" name="j_password" id="j_password" class="int"/></td>

      <td colspan="2">&nbsp;</td>

      <td height="30" colspan="2" align="right">

        <input type="submit"  id="btnok" value="登入" class="btn"/>

       <input id="reset" type="reset" value="取消" class="btn"/></td>

    </form>

  </table>

</div>

<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">

  <tr>

    <td><table width="601" height="364" border="0" align="center" cellpadding="0" cellspacing="0" background="p_w_picpaths/login.jpg">

      <tr>

        <td>&nbsp;</td>

      </tr>

    </table></td>

  </tr>

</table>

</body>

</html>

 需要注意的是這裡的使用者名,密碼和送出頁面必須固定為j_username,j_password,j_security_check見檔案的反顯部分。

3、error.jsp

<%@ page contentType="text/html; charset=GBK" %>

<html>

<title>

error

</title>

<body bgcolor="#ffffff">

<h1>

Login error!

</h1>

4、在web.xml裡配置要保護的資源

<security-constraint>

    <web-resource-collection>

      <web-resource-name>admin</web-resource-name>

      <url-pattern>/admin/*</url-pattern>

      <http-method>PUT</http-method>

      <http-method>GET</http-method>

    </web-resource-collection>

      <web-resource-name>pages</web-resource-name>

      <url-pattern>/pages/*</url-pattern>

      <web-resource-name>indexservlet</web-resource-name>

      <url-pattern>/indexservlet</url-pattern>

      <web-resource-name>index</web-resource-name>

      <url-pattern>/index.jsp</url-pattern>

    <auth-constraint>

      <role-name>mgr</role-name>

    </auth-constraint>

    <user-data-constraint>

      <transport-guarantee>NONE</transport-guarantee>

    </user-data-constraint>

  </security-constraint>

這裡我配置了對admin目錄、index.jsp、indexservlet的保護,隻允許mgr角色可以通路,注意不要對error.jsp也保護了,否則會導緻登陸失敗時達不到錯誤頁面。

5、配置角色:

mgr是這樣配置的:

在web.xml裡加入:

<security-role>

    <role-name>mgr</role-name>

  </security-role>

在weblogic.xml裡加入角色映射:

<security-role-assignment>

    <principal-name>admin</principal-name>

      </security-role-assignment>

該段表示将weblogic伺服器裡配置的admin使用者映射為這裡的mgr角色。

6、配置驗證方式:

在web.xml裡加入

<login-config>

    <auth-method>FORM</auth-method>

    <form-login-config>

      <form-login-page>/login.html</form-login-page>

      <form-error-page>/error.jsp</form-error-page>

    </form-login-config>

  </login-config>

現在,打包釋出你的程式,輸入任何保護的資源,在未驗證的情況下就會跳轉到登陸頁面了,進而完成對資源的保護。