<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    悟心

    成功不是將來才有的,而是從決定去做的那一刻起,持續(xù)累積而成。 上人生的旅途罷。前途很遠,也很暗。然而不要怕。不怕的人的面前才有路。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      93 隨筆 :: 1 文章 :: 103 評論 :: 0 Trackbacks

     

     在JSP基本登錄模塊Ⅳ中,如果在密碼欄輸入“' or '1'='1”,我們發(fā)現(xiàn)不知道密碼也可以登錄成功。
    這是因為當(dāng)我們的密碼為“
    ' or '1'='1”時,SQL語句變?yōu)椋?br /> Select * FROM member Where username='magci' and password='' or '1'='1'
    '1'='1'是永真的,這條SQL語句是能通過驗證的。
    這就是SQL注入攻擊。

    為了防止SQL注入攻擊,可以使用PraparedStatement對象操作數(shù)據(jù)庫。
    改進后的登錄模塊如下:

    附加功能:防止SQL注入攻擊

    登錄模塊至少需要以下幾個頁面:
    1.檢查Cookie頁面(index.jsp);
    2.輸入用戶信息頁面(login.jsp);
    3.用戶合法性驗證頁面(check.jsp);
    4.登錄成功歡迎頁面(pass.jsp)(檢查Session設(shè)置);
    5.登錄失敗提示頁面(failure.jsp);
    6.注銷登錄頁面(logout.jsp)。

    數(shù)據(jù)庫:member.mdb


    結(jié)構(gòu)圖:

    ---------------------------------------------------------------------

                     index.jsp
                           
    |
                           
    |判斷Cookie中有無用戶名、密碼
              
    ----------------------
              
    |   Y                 N  |
              
    |                          V
              
    |                      login.jsp<--------------------
              
    |                          |輸入用戶名、密碼           |
              
    |                          V                                  |
              
    ---------------->check.jsp                           |
                                          
    |查詢用戶名、密碼          |
                                          V                                  
    |
                                   member.mdb                      
    |
                                          
    |返回結(jié)果                      |
                                          V                                  
    |
                                     check.jsp                          
    |
                                          
    |判斷用戶是否合法          |
                              
    ---------------------                     |
                              
    |  Y                N  |                     |
                              V                       V                    
    |
                          pass.jsp           failure.jsp
    ------->|
                              
    |                                              |
                              
    | 檢查session是否含有用戶名      |
                    
    -----------------                                    |
                    
    | Y             N |                                    |
                    V                  V                                   
    |
               pass.jsp          跳轉(zhuǎn)
    ------------------------->|
                    
    |                                                        |
                    
    |注銷                                                  |
                    V                                                       
    |
              logout.jsp
    ------------------------------------>|

    ---------------------------------------------------------------------

    index.jsp:

     程序代碼

    <%@ page contentType="text/html;charset=GB2312" %>
    <html>
      
    <head>
        
    <title>index</title>
      
    </head>
      
      
    <body>
        
    <%
            
    int i;
            
    //初始化,用于保存Cookie中的用戶名、密碼
            String C_username="";
            String C_password
    ="";
            
    //獲取全部Cookie
            Cookie c[]=request.getCookies();
            
    for(i=0;i<c.length;i++)
            {
                
    //在Cookie中查找用戶名、密碼,如果找到,則分別將其賦值給用戶名、密碼變量
                if("username".equals(c[i].getName()))
                    C_username
    =c[i].getValue();
                
    if("password".equals(c[i].getName()))
                    C_password
    =c[i].getValue();
            }
            
    if(!"".equals(C_username) && !"".equals(C_password))
            {
                
    //Cookie中有用戶名、密碼,將用戶名、密碼提交到驗證頁面
                response.sendRedirect("check.jsp?username="+C_username+"&password="+C_password);
            }
            
    else
            {
            
    //Cookie中沒有用戶名、密碼,跳轉(zhuǎn)到登錄頁面
        %>
            
    <jsp:forward page="login.jsp" />
        
    <%
            }
        
    %>
      
    </body>
    </html>

     

    login.jsp:

     程序代碼

    <%@ page contentType="text/html;charset=GB2312" %>
    <html>
      
    <head>
        
    <title>登錄</title>
      
    </head>
      
      
    <body>
          
    <center>
          
    <h1>登錄頁面</h1>
          
    <hr>
        
    <form action="check.jsp" method="post">
            
    <table>
                
    <tr>
                    
    <td>用戶名:</td>
                    
    <td><input type="text" name="username" /></td>
                
    </tr>
                
    <tr>
                    
    <td>密  碼:</td>
                    
    <td><input type="password" name="password" /></td>
                
    </tr>
                
    <tr>
                
    <td>Cookie選項:</td>
                
    <td>
                    
    <input type="radio" name="cookie" value="nosave" checked>不保存
                    
    <input type="radio" name="cookie" value="save">保存1分鐘
                
    </td>
                
    </tr>
                
    <tr>
                    
    <td colspan="2" align="center">
                        
    <input type="submit" value="登錄" /> 
                        
    <input type="reset" value="重置" />
                    
    </td>
                
    </tr>
            
    </table>
        
    </form>
        
    </center>
      
    </body>
    </html>

     

    check.jsp:

     程序代碼

    <%@ page contentType="text/html;charset=GB2312" %>
    <%@ page import="java.sql.*" %>
    <html>
      
    <head>
        
    <title>驗證頁面</title>
      
    </head>
      
      
    <body>
        
    <%
            String Username
    =request.getParameter("username");
            String Password
    =request.getParameter("password");
            String IsCookie
    =request.getParameter("cookie");
            
    //定義標(biāo)志,標(biāo)記是否為合法用戶,true為合法,false為非法
            Boolean isUser=false;
            
    //定義數(shù)據(jù)庫連接驅(qū)動
            final String DBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";
            
    //定義數(shù)據(jù)庫連接地址
            final String DBURL="jdbc:odbc:member";
            
    //定義變量存放SQL語句
            String sql=null;
            
    //定義數(shù)據(jù)庫連接對象
            Connection conn=null;
            
    //定義數(shù)據(jù)庫操作對象
            PreparedStatement pstmt=null;
            
    //定義結(jié)果集
            ResultSet rs=null;
            
    try{
                
    //加載數(shù)據(jù)庫驅(qū)動
                Class.forName(DBDRIVER);
                
    //連接數(shù)據(jù)庫
                conn=DriverManager.getConnection(DBURL);
                
    //預(yù)預(yù)處SQL語句
                sql="Select * FROM member Where username=? and password=?";
                
    //實例化數(shù)據(jù)庫操作對象
                pstmt=conn.prepareStatement(sql);
                
    //設(shè)置psmt中“?”對應(yīng)的變量
                pstmt.setString(1,Username);
                pstmt.setString(
    2,Password);
                
    //查詢數(shù)據(jù)庫,返回結(jié)果集
                rs=pstmt.executeQuery();
                
    if(rs.next())
                {
                    
    //數(shù)據(jù)庫中有符合的記錄,合法用戶
                    isUser=true;
                }
                
    //關(guān)閉結(jié)果集
                rs.close();
                
    //關(guān)閉操作
                pstmt.close();
                
    //關(guān)閉連接
                conn.close();
            }
            
    catch(Exception e)
            {
                System.out.println(e);
            } 
            
    //判斷用戶名、密碼的合法性
            if(isUser)
            {
                
    //合法用戶
                if("save".equals(IsCookie))
                {
                    
    //如果選擇了保存Cookie選項,則保存Cookie
                    Cookie c1=new Cookie("username",Username);
                    Cookie c2
    =new Cookie("password",Password);
                    
    //設(shè)置Cookie保存時間為1分鐘
                    c1.setMaxAge(60);
                    c2.setMaxAge(
    60);
                    response.addCookie(c1);
                    response.addCookie(c2);
                }
                
    //設(shè)置session屬性
                session.setAttribute("username",Username);
                
    //跳轉(zhuǎn)到歡迎頁面
                %>
                
    <jsp:forward page="pass.jsp"/>
                
    <%
            }
            
    else
            {
                
    //非法用戶,跳轉(zhuǎn)到登錄失敗頁面
                %>
                
    <jsp:forward page="failure.jsp" />
                
    <%
            }
        
    %>
      
    </body>
    </html>

     

    pass.jsp:

     程序代碼

    <%@ page contentType="text/html;charset=GB2312" %>
    <html>
      
    <head>
        
    <title>登錄成功</title>
      
    </head>
      
      
    <body>
        
    <center>
        
    <%
            
    //獲取session屬性值
            String Mem_Session=(String)session.getAttribute("username");
            
    if(Mem_Session!=null)
            {
                
    //session的username屬性里含有用戶名,可以瀏覽此頁面
        %>
                
    <h1>登錄成功!!</h1>
                
    <hr>
                
    <h3>歡迎<font size="12" color="red">
                
    <%--forward跳轉(zhuǎn)為服務(wù)器端跳轉(zhuǎn),跳轉(zhuǎn)后仍在check.jsp頁面,可以繼續(xù)使用usename參數(shù) --%>
                
    <%=request.getParameter("username"%>
                
    </font>光臨!</h3>
                
    <p>
                
    <a href="logout.jsp">注銷登錄</a>
        
    <%
            }
            
    else
            {
                
    //session的username屬性里沒有正確的用戶名,無法瀏覽此頁面,跳轉(zhuǎn)到登錄頁面
        %>
                
    <h1>您還沒有登錄!</h1>
                3秒之后跳轉(zhuǎn)到登錄頁面
                
    <p>
                如果沒有跳轉(zhuǎn),請點
    <a href="login.jsp">這里</a>
        
    <%
                response.setHeader(
    "refresh","3;URL=login.jsp");
            }
        
    %>
        
    </center>
      
    </body>
    </html>

     

    failure.jsp:

     程序代碼

    <%@ page contentType="text/html;charset=GB2312" %>
    <html>
      
    <head>
        
    <title>登錄失敗</title>
      
    </head>
      
      
    <body>
        
    <div align="center">
        
    <h1>登錄失敗!!</h1>
        
    <hr>
        
    <a href="login.jsp">重新登錄</a>
        
    </div>
      
    </body>
    </html>

     

    logout.jsp:

     程序代碼

    <%@ page contentType="text/html;charset=GB2312" %>
    <html>
      
    <head>
        
    <title>注銷登錄</title>
      
    </head>
      
      
    <body>
        
    <%
            
    //使session失效
            session.invalidate();
        
    %>
        
    <center>
            
    <h1>注銷成功!</h1>
            3秒后跳轉(zhuǎn)到登錄頁面
            
    <p>
            如果沒有跳轉(zhuǎn),請點
    <a href="login.jsp">這里</a>
        
    <%
            response.setHeader(
    "refresh","3;URL=login.jsp");
        
    %>
        
    </center>
      
    </body>
    </html>

     

    本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http:
    //blog.csdn.net/samsunge808/archive/2009/02/11/3878091.aspx
    posted on 2009-11-25 10:34 艾波 閱讀(1109) 評論(1)  編輯  收藏 所屬分類: BUG

    評論

    # aas 2010-04-28 17:05 safsa
    eras  回復(fù)  更多評論
      

    主站蜘蛛池模板: 国产男女猛烈无遮挡免费网站 | 亚洲VA综合VA国产产VA中| 99在线视频免费观看视频 | 九九视频高清视频免费观看| 色九月亚洲综合网| 国产AV日韩A∨亚洲AV电影| 老司机亚洲精品影院在线观看| 亚洲成av人在线观看网站 | 亚洲激情在线视频| 亚洲美免无码中文字幕在线| 久久夜色精品国产噜噜噜亚洲AV | 深夜国产福利99亚洲视频| 日韩色日韩视频亚洲网站| 久久亚洲欧美国产精品| 久久亚洲AV成人无码软件| 亚洲激情在线视频| 亚洲中文字幕人成乱码| 亚洲熟妇无码av另类vr影视| 亚洲AV无码专区在线观看成人| 羞羞视频在线免费观看| 国产A∨免费精品视频| 久久成人无码国产免费播放| 18pao国产成视频永久免费| 女人张腿给男人桶视频免费版| 日韩午夜免费视频| 国产亚洲精品福利在线无卡一| 亚洲AV永久纯肉无码精品动漫| 亚洲精品日韩专区silk| 亚洲最大中文字幕无码网站| 日韩色视频一区二区三区亚洲| 久99久无码精品视频免费播放| 全免费a级毛片免费看| 美女视频黄a视频全免费| 国产真人无遮挡作爱免费视频 | 在线观看免费人成视频色| 爽爽日本在线视频免费| 亚洲中文字幕视频国产| 亚洲黄色网站视频| 久久亚洲欧美国产精品| 国产麻豆成人传媒免费观看| 久久午夜免费视频|