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

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

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

    悟心

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

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

     

     在JSP基本登錄模塊Ⅳ中,如果在密碼欄輸入“' or '1'='1”,我們發現不知道密碼也可以登錄成功。
    這是因為當我們的密碼為“
    ' or '1'='1”時,SQL語句變為:
    Select 
    * FROM member Where username='magci' and password='' or '1'='1'
    '1'='1'是永真的,這條SQL語句是能通過驗證的。
    這就是SQL注入攻擊。

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

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

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

    數據庫:member.mdb


    結構圖:

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

                     index.jsp
                           
    |
                           
    |判斷Cookie中有無用戶名、密碼
              
    ----------------------
              
    |   Y                 N  |
              
    |                          V
              
    |                      login.jsp<--------------------
              
    |                          |輸入用戶名、密碼           |
              
    |                          V                                  |
              
    ---------------->check.jsp                           |
                                          
    |查詢用戶名、密碼          |
                                          V                                  
    |
                                   member.mdb                      
    |
                                          
    |返回結果                      |
                                          V                                  
    |
                                     check.jsp                          
    |
                                          
    |判斷用戶是否合法          |
                              
    ---------------------                     |
                              
    |  Y                N  |                     |
                              V                       V                    
    |
                          pass.jsp           failure.jsp
    ------->|
                              
    |                                              |
                              
    | 檢查session是否含有用戶名      |
                    
    -----------------                                    |
                    
    | Y             N |                                    |
                    V                  V                                   
    |
               pass.jsp          跳轉
    ------------------------->|
                    
    |                                                        |
                    
    |注銷                                                  |
                    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中沒有用戶名、密碼,跳轉到登錄頁面
        %>
            
    <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");
            
    //定義標志,標記是否為合法用戶,true為合法,false為非法
            Boolean isUser=false;
            
    //定義數據庫連接驅動
            final String DBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver";
            
    //定義數據庫連接地址
            final String DBURL="jdbc:odbc:member";
            
    //定義變量存放SQL語句
            String sql=null;
            
    //定義數據庫連接對象
            Connection conn=null;
            
    //定義數據庫操作對象
            PreparedStatement pstmt=null;
            
    //定義結果集
            ResultSet rs=null;
            
    try{
                
    //加載數據庫驅動
                Class.forName(DBDRIVER);
                
    //連接數據庫
                conn=DriverManager.getConnection(DBURL);
                
    //預預處SQL語句
                sql="Select * FROM member Where username=? and password=?";
                
    //實例化數據庫操作對象
                pstmt=conn.prepareStatement(sql);
                
    //設置psmt中“?”對應的變量
                pstmt.setString(1,Username);
                pstmt.setString(
    2,Password);
                
    //查詢數據庫,返回結果集
                rs=pstmt.executeQuery();
                
    if(rs.next())
                {
                    
    //數據庫中有符合的記錄,合法用戶
                    isUser=true;
                }
                
    //關閉結果集
                rs.close();
                
    //關閉操作
                pstmt.close();
                
    //關閉連接
                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);
                    
    //設置Cookie保存時間為1分鐘
                    c1.setMaxAge(60);
                    c2.setMaxAge(
    60);
                    response.addCookie(c1);
                    response.addCookie(c2);
                }
                
    //設置session屬性
                session.setAttribute("username",Username);
                
    //跳轉到歡迎頁面
                %>
                
    <jsp:forward page="pass.jsp"/>
                
    <%
            }
            
    else
            {
                
    //非法用戶,跳轉到登錄失敗頁面
                %>
                
    <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跳轉為服務器端跳轉,跳轉后仍在check.jsp頁面,可以繼續使用usename參數 --%>
                
    <%=request.getParameter("username"%>
                
    </font>光臨!</h3>
                
    <p>
                
    <a href="logout.jsp">注銷登錄</a>
        
    <%
            }
            
    else
            {
                
    //session的username屬性里沒有正確的用戶名,無法瀏覽此頁面,跳轉到登錄頁面
        %>
                
    <h1>您還沒有登錄!</h1>
                3秒之后跳轉到登錄頁面
                
    <p>
                如果沒有跳轉,請點
    <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秒后跳轉到登錄頁面
            
    <p>
            如果沒有跳轉,請點
    <a href="login.jsp">這里</a>
        
    <%
            response.setHeader(
    "refresh","3;URL=login.jsp");
        
    %>
        
    </center>
      
    </body>
    </html>

     

    本文來自CSDN博客,轉載請標明出處: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  回復  更多評論
      

    主站蜘蛛池模板: 亚洲av无码成人影院一区| 黄网站色视频免费在线观看的a站最新| 国产精品免费观看久久| 亚洲精品中文字幕乱码| 无码日韩精品一区二区三区免费 | 国产精品免费看久久久无码| 亚洲欧洲另类春色校园网站| 99视频全部免费精品全部四虎 | 五月亭亭免费高清在线| 亚洲精品视频免费看| 曰批全过程免费视频网址| 亚洲视频一区网站| 亚洲免费二区三区| 亚洲丰满熟女一区二区v| 无码国产精品一区二区免费I6| 亚洲伦理中文字幕| 成人a免费α片在线视频网站| 亚洲精华液一二三产区| 国产免费黄色大片| 日韩电影免费在线观看网址| 亚洲国产香蕉人人爽成AV片久久 | 亚洲一区二区三区香蕉| 久久久免费观成人影院| 成人A毛片免费观看网站| 亚洲AV无码一区二区二三区入口| 鲁大师在线影院免费观看 | 亚洲中文精品久久久久久不卡| 成年女人毛片免费播放人| 亚洲变态另类一区二区三区| 国产大片51精品免费观看| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲精品国产免费| 亚洲综合精品伊人久久| 国产精品极品美女免费观看| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲欧洲精品久久| 免费看韩国黄a片在线观看| 欧洲亚洲国产精华液| 相泽亚洲一区中文字幕| 免费观看91视频| 亚洲伊人精品综合在合线|