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

【网络安全渗透测试零基础入门必知必会】之SQL防御(非常详细)零基础入门到精通,收藏这一篇就够了⭐什么是预处理?
预处理指的是在代码执行前对一些变量或数据进行处理,以提高程序的性能和安全性。在编程中&#xff0

什么是预处理?

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

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 其中liveStreaming=\’任意值\’或\’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 代码。影响。

学习资料分享

当然,只给出方案而不给出教材,无异于流氓行为。 ### 如果您有兴趣开始网络安全,请单击此处。 CSDN礼包:《黑客网络安全入门进阶学习资源包》免费分享。

如果您对网络安全感兴趣,我们的学习资源免费共享,并保证完全免费。 (Heyke入门教程)

全套网络安全(Heyke)学习视频

通过看视频学习的时候,理解并运用它们,而不是仅仅动动眼睛、动动脑袋,才是更科学的学习方法。

网安(嘿客红蓝对抗)所有方向的学习路线****

对于刚接触网络安全的学生,我们创建了详细的学习和成长路线图。这可以说是最科学、最系统的学习路线。每个人都可以遵循这个大方向。

学习资料工具包

盒子底部的丰富资源全面深入地介绍了基础网络安全理论,包括逆向工程、八层网络防御、汇编语言、白帽网络安全、密码学、网络安全协议等。它被集成到.基础理论与主流工具的应用实践。帮助读者了解各种主流工具背后的实现机制。

面试问题信息

我们的专用频道收集了京东、360、天融信等公司的试题。大工厂的入口就在拐角处!

嘿客必备开发工具

工欲善其事,必先利其器。学习黑客常用的开发软件都在这里了,节省了大家很多时间。

这份完整版的网络安全(嘿客)全套学习资料已经上传至CSDN官方,朋友们如果需要点击下方链接也可扫描下方微信二v码获取网络工程师全套资料【保证100%免费】

如果你对网络安全入门感兴趣,那么你点击这里CSDN大礼包:《黑客网络安全入门进阶学习资源包》免费分享

#【网络安全渗透测试零基础初学者应该知道的事】以上关于SQL防御(非常详细)的信息足够收藏这篇文章了,从零基础到掌握。相关内容来源仅用于相关信息。请访问官方网站。演示将优先。

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

(0)
CSDN的头像CSDN
上一篇 2024年6月25日
下一篇 2024年6月25日

相关推荐

发表回复

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