java安全从0到1-第1章

admin 2023年5月19日19:22:22评论29 views字数 5479阅读18分15秒阅读模式
java安全从0到1-第1章

java安全从0到1-第1章



java安全从0到1-第1章



欢迎关注暗魂攻防实验室













java安全从0到1-第1章

java安全从0到1-第1章


环境准备

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


java安全从0到1-第1章

简单测试,不选数据库了

java安全从0到1-第1章


解决控制台乱码

java安全从0到1-第1章

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

-Dfile.encoding=UTF-8

java安全从0到1-第1章


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

java安全从0到1-第1章


知识点


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[] args) throws ClassNotFoundException, SQLException {
       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);     //com.mysql.jdbc.JDBC4Connection@506c589e

       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安全从0到1-第1章

java安全从0到1-第1章

java安全从0到1-第1章


预编译技术后边会讲到,在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);
      }


  }
}







java安全从0到1-第1章



java安全从0到1-第1章

java安全从0到1-第1章

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

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

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

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


java安全从0到1-第1章
java安全从0到1-第1章
微信搜一搜
java安全从0到1-第1章
暗魂攻防实验室


原文始发于微信公众号(暗魂攻防实验室):java安全从0到1-第1章

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月19日19:22:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   java安全从0到1-第1章https://cn-sec.com/archives/1746999.html

发表评论

匿名网友 填写信息