解决 SQL 注入问题

解决 SQL 注入问题

推荐(免费):SQL教程

SQL注入是什么?

看一下百度百科的定义:
在这里插入图片描述
啊,好长一大段文字,些许不想看,下面通过一个例子,来说明一下什么是SQL注入:

新建一个数据库,再建一个表,添加两行数据:

use db1;create table user(id int primary key auto_increment,username varchar(32),password varchar(32));insert into user values(null,'zhangsan','123');insert into user values(null,'lisi','234');

登录后复制

表如下图所示:
在这里插入图片描述
再随随便便用JDBC写个登陆操作:

package com.wzq.jdbc;import com.wzq.util.JDBCUtils;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Scanner;/* *   需求: *       1、通过键盘录入用户名和密码 *       2、判断用户是否登陆成功 * */public class JDBCDemo05 {    public static void main(String[] args) {        Scanner cin = new Scanner(System.in);        System.out.println("请输入用户名:");        String username = cin.nextLine();        System.out.println("请输入密码:");        String password = cin.nextLine();        boolean res = new JDBCDemo05().login(username, password);        if (res) System.out.println("登陆成功!");        else System.out.println("登陆失败!");    }    public boolean login(String username, String password) {        if (username == null || password == null) {            return false;        }        Connection conn = null;        Statement stmt = null;        ResultSet rs = null;        try {            //1、获取数据库连接            conn = JDBCUtils.getConnection();   //JDBCUtils工具类            //2、定义sql            String sql = "select * from user where username = '" + username + "' and password = '" + password + "'";            //3、获取执行sql的对象            stmt = conn.createStatement();            //4、执行sql            rs = stmt.executeQuery(sql);            return rs.next();        } catch (SQLException e) {            e.printStackTrace();        } finally {            JDBCUtils.close(rs, stmt, conn);        }        return false;    }}

登录后复制

测试一下:
在这里插入图片描述
可以看到,普通的检验没有任何问题,现在使用SQL注入:

账户名称随便输入,密码输入:a’ or ‘a’=’a
在这里插入图片描述
惊讶的发现,居然登陆成功了。输出一下sql看一下:

select * from user where username = 'askjdhjksahd' and password = 'a' or 'a' = 'a'

登录后复制

可以看到where之后的条件,无论是什么结果都为真,都会输出整个表:
在这里插入图片描述
所以,综上所述:在sql拼接时,有一些sql的特殊关键字参与字符串的拼接,就会造成安全性问题,这就是上面为什么能登陆成功的原因所在。

那怎么解决这个问题呢?

答:利用PreparedStatement对象,不使用Statement对象。

PreparedStatement对象是Statement对象的子类,它是预编译的sql,所以运行速度会比Statemnet更快。

PerpaerdStatement使用?作为占位符,使用setXxx(索引,值)给?赋值

所以我们替换一下Statement,写一下代码:

    public boolean login(String username, String password) {        if (username == null || password == null) {            return false;        }        Connection conn = null;        PreparedStatement pstmt = null;        ResultSet rs = null;        try {            //1、获取数据库连接            conn = JDBCUtils.getConnection();   //JDBCUtils类            //2、定义sql            String sql = "select * from user where username = ? and password = ?";            //3、获取执行sql的对象            pstmt = conn.prepareStatement(sql);            pstmt.setString(1,username);            pstmt.setString(2,password);            //4、执行sql            rs = pstmt.executeQuery();            return rs.next();        } catch (SQLException e) {            e.printStackTrace();        } finally {            JDBCUtils.close(rs, pstmt, conn);        }        return false;    }

登录后复制

测试一下:
在这里插入图片描述
成功解决!

以上就是解决 SQL 注入问题的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2019385.html

(0)
上一篇 2025年2月23日 18:48:20
下一篇 2025年2月23日 18:48:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 利用Linux服务器保护Web接口免受SQL注入攻击。

    利用Linux服务器保护Web接口免受SQL注入攻击 随着互联网的发展,Web接口的使用越来越普遍,从而也增加了Web应用程序受到SQL注入攻击的风险。SQL注入攻击是一种利用Web应用程序中未经过滤的用户输入,从而在数据库中执行恶意SQL…

    2025年3月6日
    200
  • php如何防止sql注入攻击

    php简单实现防止sql注入的方法 方法一:execute代入参数  $var_Value) {    //获取POST数组最大值    $num = $num + 1;  }  //下标为i的数组存储的是商品id, 下标为j数组的存储的是…

    2025年3月5日
    400
  • php如何防sql注入?

    sql注入(sqli)是一种注入攻击,,可以执行恶意sql语句。它通过将任意sql代码插入数据库查询,使攻击者能够完全控制web应用程序后面的数据库服务器。 攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身…

    2025年3月5日
    200
  • 如何使用PHP防御SQL注入与远程文件包含攻击

    如何使用php防御sql注入与远程文件包含攻击 随着互联网的发展,网络安全问题变得日益严重。在Web开发过程中,SQL注入和远程文件包含攻击是最常见的安全漏洞之一。对于PHP这样的服务器端脚本语言来说,合理地防御这些攻击是至关重要的。本文将…

    编程技术 2025年3月5日
    200
  • PHP安全编程实践:防止SQL注入攻击

    php安全编程实践:防止sql注入攻击 在当今互联网时代,网站的安全性成为了极其重要的问题。尤其是对于使用PHP编程语言开发的网站来说,防止SQL注入攻击是一项至关重要的任务。本文将介绍一些PHP安全编程实践,旨在帮助开发人员提高程序的安全…

    编程技术 2025年3月5日
    200
  • 防止SQL注入的ASP.NET方法实例解析

    最近接手别人一个项目,发现存在sql注入漏洞,因为不想改太多代码,所以那种参数法防注入呢我就用不着了。只能用传统的笨一点的办法了。 1、新建Global.asax文件。 2、加入如下代码: void Application_BeginReq…

    编程技术 2025年3月3日
    200
  • Python开发注意事项:避免常见的安全漏洞

    Python作为一种简单易学的编程语言,被广泛应用于各类软件开发项目中。然而,随着互联网的发展和信息安全的重要性日益凸显,开发者们也越来越需要关注代码的安全性。本文将介绍一些在Python开发过程中需要注意的常见安全漏洞,并提供一些避免这些…

    2025年2月26日
    200
  • php用什么方法防止sql注入攻击

    在服务器端进行配置 安全,PHP代码编写是一方面,PHP的配置更是非常关键。我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配置php.ini中的内容,让我们执…

    2025年2月25日
    200
  • php防止sql注入的方法总结

    php防止sql注入的方法 【一、在服务器端配置】 安全,PHP代码编写是一方面,PHP的配置更是非常关键。 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配…

    2025年2月25日
    200
  • 快速了解sql注入基本原理

    SQL注入基本原理 WEB技术发展日新月异,但是徒手拼SQL的传统手艺还是受相当多的开发者亲睐。毕竟相比于再去学习一套复杂的ORM规则,手拼更说方便,直观。通常自己拼SQL的人,应该是有听说过SQL注入很危险,但是总是心想:我的SQL语句这…

    2025年2月23日
    200

发表回复

登录后才能评论