网站优化

首页 > 新闻资讯 > 网站优化 > 程序员的SQL注入问题总结

程序员的SQL注入问题总结

2019-09-12 热度:93 ℃
一、SQL注入介绍
 
SQL注入就是将原本的SQL语句的逻辑结构改变,使得SQL语句的执行结果和原本开发者的意图不一样;
方法:在表单中将命令当作用户输入提交给程序;
 
二、SQL注入范例
 
这里我们根据用户登录页面
 
<form action="" >
用户名:<input type="text" name="username"><br/>
密  码:<input type="password" name="password"><br/>
 </form>
 
预先创建一个表:
 
create table user_table(
    id      int Primary key,
    username    varchar(30),
    password    varchar(30)
);
 
insert into user_table values(1,'xiazdong-1','12345');
insert into user_table values(2,'xiazdong-2','12345');
一般查询数据库的代码如下:
 
public class Demo01 {
    public static void main(String[] args) throws Exception {
        String username = "xiazdong";
        String password = "12345";  
        String sql = "SELECT id FROM user_table WHERE " + "username='" + username
                + "'AND " + "password='" + password + "'";
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql:// www.it165.net :3306/db1","root","12345");
        PreparedStatement stat = con.prepareStatement(sql);
        System.out.println(stat.toString());
        ResultSet rs = stat.executeQuery();
        while(rs.next()){
            System.out.println(rs.getString(1));
        }
    }
}
但是这里username=xiazdong,password=12345,
因此此处的SQL语句为:
 
SELECT id FROM user_table WHERE username='xiazdong' AND password='12345';
如果我们把username和password的值变为:
username='  OR 1=1 --
password=x
会变成一个很可怕的情况:将把数据库中所有用户都列出来,为什么呢?
因为SQL语句现在为:
 
SELECT id FROM user_table WHERE username='' OR 1=1 -- ' AND password='12345';
因为--表示SQL注释,因此后面语句忽略;
因为1=1恒成立,因此username='' OR 1=1  恒成立,因此SQL语句等同于:
 
SELECT id FROM user_table;
很奇妙吧....
 
三、解决方法
 
其实解决方法很简单,就是使用PreparedStatement即可;
 
最后引入一张SQL注入的图片:

程序员的SQL注入问题总结  第1张

相关文章

高德导航安全问题致用户资料泄露与修复

高德导航安全问题致用户资料泄露与修复

由于某安全问题导致全线业务受影响,用户资料泄露,修改官网app、地图下载地址,绑个马改个地址,应该挺爽的。 能添加序列号删除序列号,不知道删掉后,用它注册的设备还能不能用了。。淘宝开个...

代码审计ECSHOP最新cookie验证不严漏洞 2013 6月全版本通杀

代码审计ECSHOP最新cookie验证不严漏洞 2013 6月全版本通杀

这个漏洞是我们在进行非授权安全评估时候发现的。是一个ecshop的站,通过以往的0day爆出了管理员密码,无奈解不开。。。于是就想,有没有可能将密文md5存入cookie中登陆。 当然...

Umbraco CMS远程命令执行缺陷

Umbraco CMS远程命令执行缺陷

require 'msf/core' class Metasploit3 < Msf::Exploit::Remote Rank = Excell...

XSS输出&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;之间及修复方案

XSS输出&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;之间及修复方案

接着上面一个教程 XSS未过滤的入门及修复方案,我们继续。这个例子属于第一例的特殊情况,当然也有特殊解法。也属于非常常见的一种情况。 1. 我们找到这么一个点,也是输入和输出都未过滤的...

12行JS代码的DoS攻击分析及防御

12行JS代码的DoS攻击分析及防御

有一段12行的JavaScript代码,可以让Firefox、Chrome、Safari浏览器崩溃,而且还能让iPhone重启、安卓闪退,本文作者对这12行代码进行了分析解读并且提出了相...

SSL/TLS真的被BEAST攻击攻破了吗?真实情况是怎样的?我应该做什么?

SSL/TLS真的被BEAST攻击攻破了吗?真实情况是怎样的?我应该做什么?

原文链接:https://luxsci.com/blog/is-ssltls-really-broken-by-the-beast-attack-what-is-the-real-sto...

jo:通过shell命令创建JSON

jo:通过shell命令创建JSON

我尝试损坏shell脚本来创建JSON。你可能已经在某些地方看过这个了: echo '{"name":"Jane"}' 如果一...

非法探取密码的原理及其防范

非法探取密码的原理及其防范

一、非法获取Password的原理: Edit控件是Windows的一个标准控件,当把其Password属性设为True时就会将输入的内容屏蔽为星号,从而达到保护的目的。虽然我们看来都...

我们检测到您可能使用 AdBlock 或者其他广告屏蔽插件,导致网页出现错位、变形以及丢失的情况,影响网站内容的阅读。
本站无任何商业广告!为了伍林堂平台的生存,恳请您能够理解,将伍林堂旗下交互产品加入白名单(方法点此),万分感谢!