【java安全】从0到1--第1章
2023-5-20 09:18:17 Author: 安全圈小王子(查看原文) 阅读量:10 收藏

转自暗魂攻防实验室

欢迎关注暗魂攻防实验室

环境准备

https://www.jetbrains.com/idea/ #idea下载
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1774786&highlight=idea#idea在线激活
汉化插件
java 1.8
tomacat 9.0

简单测试,不选数据库了

解决控制台乱码

帮助-》编辑自定义VM选项

-Dfile.encoding=UTF-8

运行默写代码片段时,点击绿的三角就可以执行

知识点

JavaEE-HTTP-Servlet&路由&周期

#JavaEE-HTTP-Servlet&路由&周期
参考:https://blog.csdn.net/qq_52173163/article/details/121110753
解释
Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。使用Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。本章内容详细讲解了web开发的相关内容以及servlet相关内容的配置使用,是JAVAEE开发的重中之重。

创建和使用Servlet
-创建一个类继承HttpServlet
-web.xml配置Servlet路由
-WebServlet配置Servlet路由
-写入内置方法(init service destroy doget dopost)

Servlet生命周期


处理接受和回显
HttpServletRequest是ServletRequest的子接口
getParameter(name) — String 通过name获得值
getParameterValues — String[ ] 通过name获得多值

HttpServletResponse是ServletResponse的子接口
setCharacterEncoding() 设置编码格式
setContentType() 设置解析语言
getWriter() 获得一个PrintWriter字符输出流输出数据
PrintWriter 接受符合类型数据

JavaEE-数据库-JDBC&Mybatis&库

#JavaEE-数据库-JDBC&Mybatis&库
-原生态数据库开发:JDBC
参考:https://www.jianshu.com/p/ed1a59750127
JDBC(Java Database connectivity): 由java提供,用于访问数据库的统一API接口规范.数据库驱动: 由各个数据库厂商提供,用于访问数据库的jar包(JDBC的具体实现),遵循JDBC接口,以便java程序员使用!
1、下载jar
https://mvnrepository.com/
2、引用封装jar
创建lib目录,复制导入后,添加为库
3、注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
4、建立数据库连接
String url ="jdbc:mysql://localhost:3306/demo01";
Connection connection=DriverManager.getConnection(url,"x","x");
5、创建Statement执行SQL
Statement statement= connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
6、结果ResultSet进行提取
while (resultSet.next()){
  int id = resultSet.getInt("id");
  String page_title = resultSet.getString("page_title");
  .......
}

安全修复SQL注入:预编译
原理:提前编译好执行逻辑,你注入的语句不会改变原有逻辑!

-框架数据库开发:Mybatis
Mybatis是一款优秀的持久层框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程,减少了代码的冗余,减少程序员的操作。

jdbc操作mysql


//mysql-connector-java-5.1.47.jar
//在目录下建一个lib,并加入到库文件当中
//这边用的数据库的例子是从xhcms的数据库中拿到的文件

package com.example.demo;
import java.sql.*;

public class MyselectServiet {
   public static void main(String[] argsthrows ClassNotFoundExceptionSQLException {
       Class.forName("com.mysql.jdbc.Driver");
       String url = "jdbc:mysql://localhost:3306/xhcms";
       Connection connection = DriverManager.getConnection(url,"xhcms","admin123");
       System.out.println(connection);

       String sql = "select * from manage";
       Statement statement = connection.createStatement();
       ResultSet rs = statement.executeQuery(sql);     //[email protected]

       while (rs.next()){
           int id =rs.getInt("id");
           String name = rs.getString("name");
           String qq = rs.getString("qq");
           String mail = rs.getString("mail");
           System.out.println(id+"||"+name+"||"+qq+"||"+mail);
      }




  }
}

预编译技术后边会讲到,在java当中比较容易实现所以不容易出现sql注入

String sql = "select * from manage where id="+id;//拼接写法
String sql = "select * from manage where id=?";//预编译写法

JavaEE-jdbc预编译-SQL

预编译SQL语句并执行,预防SQL注入问题

普通查询

//mysql-connector-java-5.1.47.jar
//在目录下建一个lib,并加入到库文件当中
//这边用的数据库的例子是从xhcms的数据库中拿到的文件

package com.example.demo;
import java.sql.*;
import java.util.Scanner;

public class MyselectServiet {
  public static void main(String[] args) throws ClassNotFoundException, SQLException {

      //通过输入id,来查找对应的值
      Scanner scanner = new Scanner(System.in);
      System.out.print("please inout id:");
      String s = scanner.nextLine();
      //System.out.println(s);


      //数据库查询
      Class.forName("com.mysql.jdbc.Driver");
      String url = "jdbc:mysql://localhost:3306/xhcms";
      Connection connection = DriverManager.getConnection(url,"xhcms","admin123");
      //System.out.println(connection);

      //通过传入的id值来进行查询
      String sql = "select * from manage where id="+s;
      System.out.println(sql);
      Statement statement = connection.createStatement();
      ResultSet rs = statement.executeQuery(sql);
      //System.out.println(rs);

      //拿到对应的查询值进行输出
      while (rs.next()){
          int id =rs.getInt("id");
          String name = rs.getString("name");
          String qq = rs.getString("qq");
          String mail = rs.getString("mail");
          System.out.println(id+"||"+name+"||"+qq+"||"+mail);
      }
  }
}

预编译的写法

String safesql="select * from news where id=?";
PreparedStatement preparedStatement=connection.prepareStatement();
preparedStatement.setString(1,s);
ResultSet resultSet=preparedStatement.executeQuery();

预编译实现

//mysql-connector-java-5.1.47.jar
//在目录下建一个lib,并加入到库文件当中
//这边用的数据库的例子是从xhcms的数据库中拿到的文件

package com.example.demo;
import java.sql.*;
import java.util.Scanner;

public class MyselectServiet {
  public static void main(String[] args) throws ClassNotFoundException, SQLException {

      //通过输入id,来查找对应的值
      Scanner scanner = new Scanner(System.in);
      System.out.print("please inout id:");
      String s = scanner.nextLine();
      //System.out.println(s);


      //数据库查询
      Class.forName("com.mysql.jdbc.Driver");
      String url = "jdbc:mysql://localhost:3306/xhcms";
      Connection connection = DriverManager.getConnection(url,"xhcms","admin123");
      //System.out.println(connection);

/*     //通过传入的id值来进行查询,普通写法
      String sql = "select * from manage where id="+s;
      System.out.println(sql);
      Statement statement = connection.createStatement();
      ResultSet rs = statement.executeQuery(sql);
      //System.out.println(rs);*/

      //预编译写法
      String safesql="select * from manage where id=?";
      PreparedStatement preparedStatement=connection.prepareStatement(safesql);
      preparedStatement.setString(1,s);
      ResultSet rs=preparedStatement.executeQuery();
      System.out.println(safesql);


      //拿到对应的查询值进行输出
      while (rs.next()){
          int id =rs.getInt("id");
          String name = rs.getString("name");
          String qq = rs.getString("qq");
          String mail = rs.getString("mail");
          System.out.println(id+"||"+name+"||"+qq+"||"+mail);
      }


  }
}

anhunsec_redteam_V2.4 正式版红队渗透系统简介

网络安全新赛道-数据安全生命周期

网络安全新赛道-带你了解数据安全

【漏洞复现】CVE-2023-21839 weblogic-RCE 漏洞复现

微信搜一搜
暗魂攻防实验室

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg4MjY3NDI5Mw==&mid=2247486403&idx=2&sn=3e7b97b7ef2cf2adcf64bf920e98a992&chksm=cf5254d9f825ddcf3741cc24c891fe3097d074a4a89d0c905a3d1439220e90b02a5292124ecd#rd
如有侵权请联系:admin#unsafe.sh