当前位置:  技术问答>java相关

为什么创建session会出错,实在无能为力,向大家求助!

    来源: 互联网  发布时间:2015-11-12

    本文导语:  我准备用servlet写一个类似于购物车的程序。在用户通过验证之后,就HttpSession session = request.getSession(true);可是在调试的时候发现一运行到这里就会出错,实在不解......求救! 该段方法如下: private void showMemberConten...

我准备用servlet写一个类似于购物车的程序。在用户通过验证之后,就HttpSession session = request.getSession(true);可是在调试的时候发现一运行到这里就会出错,实在不解......求救!
该段方法如下:
private void showMemberContent(HttpServletRequest request, HttpServletResponse response, PrintWriter out) throws ServletException, IOException {
    Connection sqlCon; //数据库连接对象
    Statement sqlStmt; //SQL 语句对象
    ResultSet sqlRst;  //结果集对象
    String strSQL;     //SQL语句
    String errMsg="";     //出错消息
    String Name = request.getParameter("Name");
    String Password = request.getParameter("Password");
    if(Name.length()==0) errMsg+="请输入用户名!
";
    if(Password.length()==0) errMsg+="请输入密码!
";
    if(errMsg.length()!=0) {
      out.println(errMsg);
      return;
    }
    Name = new String(Name.getBytes("ISO8859_1"),"gb2312");
    try {
      sqlCon = java.sql.DriverManager.getConnection(strCon);
      sqlStmt = sqlCon.createStatement();
      strSQL = "select UserID from User where Name='"+Name+"' and Password='"+Password+"' and Type=0";
      sqlRst = sqlStmt.executeQuery(strSQL);
      if(sqlRst.next()) {
        //创建session ----这里就会出错,为什么???
        HttpSession session = request.getSession(true);
        session.setAttribute("UID", new Integer(sqlRst.getInt(1)));
        session.setAttribute("UName", new String(Name));
        sqlRst.close();
        sqlStmt.close();
        out.println("登录成功! 欢迎你,"+Name+"
");
        out.println("返回首页");
      } else {
        HttpSession session = request.getSession(false);
        if(session!=null) {
          session.invalidate();
        }
        sqlRst.close();
        sqlStmt.close();
        sqlCon.close();
        out.println("用户名、密码错误!n
n");
        out.println("返回登录页面!");
      }
    } catch(Exception e) {
      out.println("服务器繁忙,请稍候再试!");
    }

  }

|
可以呀,我用MySQL时把字段中的可能的单引号用两个单引号替换就可以啦。
用户名:随便
密码:1' or '2'='2
比如对这个密码:替换后为1'' or ''2''=''2
这样它就不能破坏你的SQL语句啦。

|
大哥,你写的SQL语句有问题。不信你用以下用户名、密码试试:
用户名:随便
密码:1' or '2'='2
^_^

|
加个过滤就行了,目的是让它不能破坏你的SQL语句,至于具体怎么做方法就很多了。比如给单引号加上转义符,或者是在两个SQL中写验证。等等......

|
session.setAttribute("UID", new Integer(sqlRst.getInt(1)));
改为:
session.setAttribute("UID", sqlRst.getInt(1).toString());

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Bitsets 成员 Constructors:创建新bitsets
  • 菜鸟在c盘装了win2000,想在剩下的空间装Red Hat Enterprise Linux 3,在创建linux分区的时候,不知道都创建什么分区??我知道要创建一个
  • ftp用代码创建文件夹出错 iis7站长之家
  • 一进程源源不断地创建文件,另一进程把这些创建的文件抓取并挪走
  • C++ I/O 成员 open():创建一个输入流
  • 进程创建进程组后,然后创建该组中的进程,然后终止。这里的终止....?
  • Xcode介绍及创建工程和工程依赖操作步骤
  • linux如何创建一个共享内存 可以mount 可以创建目录之类 跟硬盘分区一样
  • HTML5 sprite 样式创建工具Stitches介绍
  • php循环创建目录示例分享(php创建多级目录)
  • navicat 8 创建数据库与创建用户分配权限图文方法
  • sql server 2008:您对无法重新创建的表进行了更改或者启用了“阻止保存重新创建表的更改”
  • mkdir()是创建文件夹的函数,有没有循环创建多个目录级的函数呢?
  • 各位高手知道在JAVA中如何用一个名称创建一个对象实例,并调用其方法,注意:在编写代码时并不知要创建的对象的类名,也并不知方法名
  • FTP上创建的文件夹的创建日期始终和本机的对不上(无论如何改变日期和时间)(紧急!!!)
  • 急!linux下mysql的创建用户组和创建用户命令不能生效啊????
  • 怎么创建包,我创建包后,怎么找不到呢?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • 100求解:如何在UNIX环境下创建一个新的端口号?另:能告之如何在WINDOWS2000环境下创建一个新的端口号就更好了!
  • linux普通用户创建文件或目录
  • 怎么创建这样一个文件???有分送,请指教


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3