zoukankan      html  css  js  c++  java
  • 每日日报

    sql注入与预防

    如果使用Statement进行查询
     sql是接收输入框输入 进行拼装的输入框中 如果输入了sql语句 比如 " "zhangsan1asdfadsf 'or' 1==1","1==1 'or' 12aasdfadsf3""
    实际上 这不是一个普通的字符串 而是一个sql语句 这个sql语句 会改变 拼装后的sql的判断条件的逻辑 从而返回错误的结果
    这种现象就叫SQL注入
     
    预防sql注入的解决方案
    不要使用statement执行直接拼装的sql
    要使用PreparedStatement 这个类会把跟sql相关的字符串 在组拼sql的时候做转义从而预防sql注入
    1. public class JDBCLogin {
    2. public static void main(String[] args) {
    3. // boolean login = login("zhangsan","123");
    4. boolean login = login("admin 'or' 1==1","1==1 'or' 12aasdfadsf3");
    5. if(login){
    6. System.out.println("登录成功");
    7. }else{
    8. System.out.println("登录失败");
    9. }
    10. }
    11. public static boolean login(String username,String password){
    12. Connection conn = JDBC_Utils.getConn();
    13. try {
    14. //Statement statement = conn.createStatement();
    15. String sql1 = "select * from user where username = ? and password = ?";
    16. PreparedStatement prepareStatement = conn.prepareStatement(sql1);
    17. prepareStatement.setString(1, username);
    18. prepareStatement.setString(2, password);
    19. // String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";
    20. // ResultSet resultSet = statement.executeQuery(sql);
    21. ResultSet resultSet = prepareStatement.executeQuery();
    22. if(resultSet.next()){
    23. return true;
    24. }else{
    25. return false;
    26. }
    27. } catch (Exception e) {
    28. e.printStackTrace();
    29. return false;
    30. }
    31. }
    32. }
    select * from user where username = 'zhangsan1asdfadsf 'or' 1==1' and password = '1==1 'or' 12aasdfadsf3'
  • 相关阅读:
    我的Java设计模式-原型模式
    我的Java设计模式-观察者模式
    我的Java设计模式-建造者模式
    我的Java设计模式-单例模式
    我的Java设计模式-工厂方法模式
    菜鸟必备教程,ajax与xml交互传输数据。
    javascript Date format(js日期格式化)
    用script实现内容显示,并使用json传输数据
    使用jquer获取当前时间,并赋值到input上。
    利用js获取时间并输出值
  • 原文地址:https://www.cnblogs.com/zhukaile/p/14376701.html
Copyright © 2011-2022 走看看