【网络安全渗透测试零基础入门必知必会】之SQL防御(非常详细)零基础入门到精通,收藏这一篇就够了(5)

【网络安全渗透测试零基础入门必知必会】之SQL防御(非常详细)零基础入门到精通,收藏这一篇就够了(5)前言
这是大白给粉丝盆友们整理的网络安全渗透测试入门阶段SQL防御第五篇。
本阶段主要讲解什么是SQL防御和预处理。
喜欢的朋友们&

前言

这是大白为粉丝整理的关于网络安全渗透测试入门阶段SQL防御的第五篇文章。

这一阶段我们主要讨论什么是SQL防御和预处理。

喜欢大白的朋友,别忘了点赞、支持、收藏大白,关注我学习黑客技术。

什么是预处理?

预处理是指在代码执行之前对一些变量或数据进行处理,以提高程序性能和安全性。在编程中,预处理通常是指在运行程序之前编译或解析代码以减少运行时开销。

SQL预处理是指在执行SQL语句并将其发送到数据库之前,将SQL语句中的参数和变量转换为占位符(即“?”)。语句执行时,占位符会被替换为具体的参数值,并发送到数据库执行。该方法显着降低了SQL注入的风险,提高了SQL执行的效率。

防SQL注入的原理

1、防恶意代码注入的原理

SQL注入是指攻击者向Web应用程序注入恶意SQL代码,导致数据库执行恶意SQL语句。为了防止SQL注入,可以采用以下原则:

1. 使用参数化查询或准备好的语句。用占位符表示SQL 语句中的参数,并将实际参数值绑定到占位符。这可以防止攻击者将恶意SQL 代码注入到参数值中。

2. 过滤用户输入。过滤用户输入数据以删除或转义可能包含SQL 注入代码的特殊字符(例如单引号、双引号和分号)。

3.限制权限。在对数据库用户进行授权时,应根据用户的需求分配最小的权限,防止攻击者通过注入SQL语句获取敏感数据。

4. 验证用户输入。验证Web 应用程序中的用户输入,以确保输入数据满足您的要求,包括类型、长度和格式。

5. 使用防火墙。使用Web 应用程序防火墙(WAF) 监视和阻止恶意SQL 注入请求。 WAF可以识别并阻止或警告恶意SQL语句。

采取上述措施可以有效防止SQL注入攻击,保护您的Web应用程序和数据库的安全。

2、模仿恶意代码注入SQL语句

如果用户输入“任意值”或“1”=“1”作为变量的值,则没有预准备语句的SQL 语句将是:

SELECT * FROM users WHERE username=“any value” or “1”=“1” AND password=”$password”;

OR 运算符的优先级低于AND 运算符,因此上述语句等效于:

SELECT * FROM users WHERE (用户名=“任意值”) OR (“1”=“1” AND 密码=“$password”);

由于“1”=“1”始终为真,因此此条件匹配所有记录并返回所有用户记录。这是一种SQL 注入攻击。使用预准备语句时,即使将“任意值”或“1”=“1”作为参数值传递,生成的SQL 语句也会将字符串作为参数传递,而不会影响SQL 代码,只需将其传递给占位符即可。一个值。它没有影响并且避免了SQL注入攻击。

封装jdbc;

导入java.sql.*;

公共课圆顶2 {

public static void main(String[] args) 抛出ClassNotFoundException, SQLException {

//1. 加载并注册驱动程序。

Class.forName(\’com.mysql.cj.jdbc.Driver\’);

//2.创建连接字符

String URL=\’jdbc:mysql://127.0.0.1:3306/1127douyinDB\’;

字符串用户名=\’root\’;

字符串密码=\’root\’;

连接con=DriverManager.getConnection(url,用户名,密码);

//3. 创建连接对象。

语句sta=con.createStatement(); //新建

//4.编写SQL语句

//注意,注意,注意! “‘任何值’或‘1’=‘1’”此代码

string sql=\’更新抖音设定收入=150000 where liveStreaming=\’任意值\’ or \’1\’=\’1\’\’;

//5. 执行命令

int row=sta.executeUpdate(sql); //可用于添加、删除、修改。

//6. 处理结果

如果(第0 行){

System.out.println(\’修改操作成功!\’);

}除此之外{

System.out.println(\’修改操作失败!\’);

}

//7. 关闭资源

con.close();

con.close();

}

}

上面的示例使用“任意值”或“1”=“1”的方法来注入恶意SQL语句。恶意用户可以通过输入“任意值”或“1”=“1”来插入SQL语句。影响最终结果。

使用预处理防止SQL被恶意注入

使用prepared statements可以有效防止SQL注入攻击。以下是具体步骤:

1. 创建准备好的语句对象。

2. 创建SQL 语句并使用参数占位符代替实际参数。示例:SELECT * FROM 用户WHERE 用户名=? AND 密码=?

3. 绑定参数值。将实际参数值与参数占位符绑定,防止恶意代码注入。

4. 执行准备好的语句。当执行一条语句时,数据库将编译好的SQL语句和参数值组合起来形成完整的SQL语句并执行该语句。

下面是使用准备好的语句来防止SQL 注入的示例代码。

封装jdbc;

导入java.sql.*;

公共课圆顶3 {

public static void main(String[] args) 抛出ClassNotFoundException, SQLException {

//1. 加载并注册驱动程序。

Class.forName(\’com.mysql.cj.jdbc.Driver\’);

//2.创建连接字符

String URL=\’jdbc:mysql://127.0.0.1:3306/1127douyinDB\’;

字符串用户名=\’root\’;

字符串密码=\’root\’;

Connection 连接=DriverManager.getConnection(url,用户名,密码);

//3.定义SQL语句

string sql=\’更新抖音集收入=? where liveStreaming=?\’;

//输入

字符串收入=\’1000\’;

String liveStreaming=\’杨哥\’;

//4. 创建预处理对象

准备语句准备=连接.准备语句(sql);

准备.setString(1,收入);

prepar.setString(2,liveStreaming);

//5. 执行预处理对象

int row=prepar.executeUpdate(); //预处理

//6. 处理结果

如果(第0 行){

System.out.println(\’更改成功!\’);

}除此之外{

System.out.println(\’更改失败!\’);

}

//Statement和Connection对象(先打开,先关闭)

准备.关闭();

连接.close();

}

}

上面的示例使用了mysql 准备好的语句对象和方法。首先,使用prepare()方法创建一个准备好的语句对象。在SQL 语句中使用? 代替实际参数,并使用将实际参数值绑定到参数占位符的方法。最终生成的SQL 语句只是将字符串作为参数值传递给您的SQL 代码。影响。

为了帮助您更好地了解网络安全,我们准备了入门级和高级的网络安全学习资料,内容即使是初学者也能理解。我不懂编程。请理解此信息。

由于篇幅限制,仅展示部分信息。要获取它,您需要单击下面的链接。

【2024最新CSDN礼包:《黑客网络安全入门进阶学习资源包》免费分享】

由于篇幅限制,仅展示部分信息。要获取它,您需要单击下面的链接。

【2024最新CSDN礼包:《黑客网络安全入门进阶学习资源包》免费分享】

由于篇幅限制,仅展示部分信息。要获取它,您需要单击下面的链接。

【2024最新CSDN礼包:《黑客网络安全入门进阶学习资源包》免费分享】

#【网络安全渗透测试零基础初学者应该知道的】以上关于SQL防御(很详细)从零基础到精通的相关内容,这篇文章足够收集了(五)来源网络,仅供参考。请提供相关信息。详见官方公告!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92177.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月25日 上午9:27
下一篇 2024年6月25日 上午9:44

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注