sql注入和防止sql注入的方法

SQL注入(SQL Injection)是一种网络安全漏洞,允许攻击者在应用程序的SQL查询中插入恶意代码。这种攻击通常发生在应用程序没有正确验证或清理用户输入数据的情况下,导致攻击者能够操纵数据库查询,获取、修改或删除敏感信息。(通过一些特殊的符号让原本的sql失效,让sql执行新的sql指令

防止sql注入:

使用预编译的语句(Prepared Statements):如使用?占位符,并通过编程语言的库绑定参数。

使用存储过程(Stored Procedures):将SQL代码预先存储在数据库中,并通过参数调用。

验证和清理用户输入:确保用户输入不包含恶意字符或SQL关键字。

使用ORM(Object-Relational Mapping)工具:许多ORM工具会自动处理SQL构建,减少注入风险。

		Scanner input=new Scanner(System.in);
		
		Class.forName("com.mysql.cj.jdbc.Driver");
		
		String url="jdbc:mysql://localhost:3306/example?serverTimezone=GMT&useSSL=false";
		String user="root";
		String pwd="password";
		Connection conn=DriverManager.getConnection(url,user,pwd);
		
		Statement statm=conn.createStatement();
		
		System.out.println("请输入用户名");
		String username=input.nextLine();
		
		System.out.println("请输入用户名密码");
		String userpwd=input.nextLine();
		
		//jdbc操作数据库的index都是从1开始
		//PreparedStatement 防止sql注入
		//1.预处理sql语句
		String sql="select * from login where lname=? and lpwd=?";
		
		PreparedStatement prepareStatement=conn.prepareStatement(sql);
		
		//2.?变成真正的参数
		prepareStatement.setObject(1, username);
		prepareStatement.setObject(2, userpwd);
		
		//3.执行
		ResultSet rs=prepareStatement.executeQuery();
		
		if(rs.next()) {
			int lid=rs.getInt("lid");
			String lname=rs.getString("lrname");
			String lsex=rs.getString("lsex");
			String laddr=rs.getString("laddr");
			System.out.println(lid+lname+lsex+laddr);
		}else {
			System.out.println("登陆失败");
		}
		
		rs.close();
		conn.close();
		statm.close();
		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值