刚刚看了个视频里面提到了sql注入漏洞有点不明白
好像是说
用select * from users where username='bba' and passwd='bnb';
一条记录也查不到
然后用select * from users where username='bba' and passwd='bnb' or 1='1';
所有的记录就都查到了但是我想,在用户登录的时候我也只能传递一个用户一个密码,又修改不了sql语句,那么这漏洞又是怎么来的?什么原理?

解决方案 »

  1.   

    漏洞就是投机取巧的方法传递参数啊。 你把密码设置成'bnb' or '1'='1'不就相当于 select * from users 了么。 
      

  2.   

    不过话说回来,SQL注入攻击太有名气了。 一般的程序员都知道用 java.sql.preparedStatement常见的 ORM 框架就更不要说了。
      

  3.   

    使用java.sql.preparedStatementPreparedStatement ps = conn.prepareStatement("select a,b from t where c 
    = ?"); ps.setUsername("")
    ps.setPasswd("")
    ResultSet rs = ps.executeQuery(); 
      

  4.   

    1楼的例子稍微修正一下
    应该在密码输入bnb' or '1'='1,最前跟最后那个单引号不要
    那么服务端拼接sql的时候由于传到后台的password为 "bnb' or '1'='1"
    sql = "select * from users where username='" + username + "' and passwd='" + password + "';"
    sql 就变成 select * from users where username='bba' and passwd='bnb' or 1='1'; 了
      

  5.   

    就是利用SQL语法,欺骗,比如:select * from users where username = 'admin--' + password='xx'
    运用 or 或者  -- 蒙混过关