<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ù)  更多評論
      

    主站蜘蛛池模板: 亚洲videos| 久久久久亚洲AV成人网| 一个人免费观看www视频| 亚洲综合婷婷久久| 亚洲一区二区精品视频| 日本免费一区尤物| 国产伦精品一区二区三区免费下载| 久久亚洲国产中v天仙www| 亚洲av无码天堂一区二区三区| 亚洲av成人一区二区三区| 16女性下面无遮挡免费| 免费国产污网站在线观看| 亚洲成AV人片在WWW色猫咪| 国产伦精品一区二区三区免费下载 | 久久精品免费观看国产| 中文字幕版免费电影网站| 亚洲无线码一区二区三区| 中文字幕亚洲一区二区三区 | 两个人的视频高清在线观看免费 | 亚洲AV成人影视在线观看 | 国产亚洲精品xxx| 精品国产人成亚洲区| 国产亚洲婷婷香蕉久久精品| 国产亚洲日韩一区二区三区| 国产成人人综合亚洲欧美丁香花| 免费人成在线观看视频播放| 伊人久久亚洲综合| 成人午夜大片免费7777| 国产又大又粗又硬又长免费| a级片免费在线观看| 久久国产精品成人免费| 免费99精品国产自在现线| 四虎亚洲国产成人久久精品| 亚洲综合色在线观看亚洲| 亚洲国产理论片在线播放| 一级免费黄色大片| 亚洲乱码日产精品a级毛片久久| 另类小说亚洲色图| 日本人的色道www免费一区| 中文字幕亚洲精品资源网| 美女内射无套日韩免费播放|