Java安全编码之用户输入
1、传统Web使用与新式移动使用
(1)传统Web使用:浏览器 HTTP 服务器(2)新式移动使用:APP HTTP 服务器
从安全视点看,传统Web使用与新式移动使用没有本质区别
2、Web使用安全的中心问题是什么?
用户提交的数据不可信是Web使用程序中心安全问题
用户能够提交恣意输入
例如:
√ 恳求参数->屡次提交或许不提交√ 修正Cookie√ 修正HTTP信息头√ 恳求次序->越过或许打乱
3、Web使用防护
(1)完善的反常处理(2)监控(3)日志:记载重要事务、反常的具体恳求信息
4、对输入的处理
主张选用:白名单尽量防止:净化或黑名单
0x01 SQL注入
1、原理:
(1)合法输入:
id=1
SELECT * FROM users WHRER id='1';
(2)歹意注入:
id=1' or '1'='1
SELECT * FROM users WHRER id='1' or 'a'='a';
2、Java代码剖析(JDBC)
(1)不合规代码(SQL参数拼接)
public class SQLInject {
public static void main(String[] args)throws Exception{
//正常输入
select("1");
// 歹意输入
select("' or 'a'='a");
}
public static void select(String id){
//声明Connection目标
Connection con;
//驱动程序名
String driver = "com.mysql.jdbc.Driver";
//URL指向要拜访的数据库名mydata
String url = "jdbc:mysql://localhost:3306/mybatis";
//MySQL装备时的用户名
String user = "root";
//MySQL装备时的暗码
String password = "budi";
//遍历查询成果集
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()办法,衔接MySQL数据库!!
con = DriverManager.getConnection(url,user,password);
if(!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
//2.创立statement类目标,用来履行SQL句子!!
Statement statement = con.createStatement();
//要履行的SQL句子
String sql = "select * from users where id='"+id+"'";
//3.ResultSet类,用来寄存获取的成果集!!
ResultSet rs = statement.executeQuery(sql);
System.out.println("-----------------");
System.out.println("履行成果如下所示:");
System.out.println("-----------------");
String age,name;
while(rs.next()){
//获取stuname这列数据
name = rs.getString("name");
//获取stuid这列数据
age = rs.getString("age");
//输出成果
System.out.println(name + "t" + age);
}
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] 黑客接单网