防范Sql注入式攻击

简介:        Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击 动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因 比如一个在线书店,可以根据用户的输入关键字搜索相关的图书。
       Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击

动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因
比如一个在线书店,可以根据用户的输入关键字搜索相关的图书。

string name = GetUserInput("BookName");
string script = "select table_book where book_name like '%" + name + RunSql(script)
RunSql(script);

如果

name= "'; select @@servername where ''='";

这样就可以得到DB Server的名字.
还以在线书店为例,用户只有登陆后才能察看自己的帐户信息,这样做是无可置疑的,然而用户验证的代码如下

//id和password直接来自用户的输入。未做处理

string id = GetUserInput("UserID");
string password = GetUserInput("UserPassword");

tring script = "select * from table_user where User_ID = '" + id + "' and User_Password? = '" + password + "' ";
RunSql(script);

如果用户输入的password为“' or ''=' ”,那么生成的script就为:

select * from table_user where User_ID = 'UserID' and User_Password = '' or ''=''

这样一来,即使不知道用户的密码也可以察看该用户的帐户信息了

再比如,入侵者会把一些巧妙伪装的代码嵌入到你动态生成的Sql命令中,比如:

Delete table_Book where 1 = 1
use master--

上面的例子都是一些简单的示例,攻击者还可能通过sql的漏洞对操作系统进行攻击,比如运行
[xp_cmdshell],[xp_regread]

当然实际上的攻击没有这么简单,攻击者还会利用系统设计的其他漏洞。比如程序把数据库返回的出错信息没有进行转换就直接输出给用户看,那么攻击者就设计一些sql语句诱导系统返回需要的信息


从上面的这些例子可以看出,对数据库访问权限的设计不当,给与每一个数据库连接太多的权限,甚至dbo或sa的权限,也是sql注入式攻击利用的主要漏洞之一。

 

防范sql注入式攻击

 

最小权限原则。特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合

对用户输入进行检查。对一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;使用强数据类型,比如你需要用户输入一个整数,就要把用户输入的数据转换成整数形式;限制用户输入的长度等等。这些检查要放在server运行,client提交的任何东西都是不可信的

使用存储过程。如果一定要使用sq语句,那么用标准的方式组建sql语句,比如可以利用parameters对象,避免用字符串直接拼sq命令。

当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库设计的细节

针对常用的sql注入式攻击方式对症下药

目录
相关文章
|
4月前
|
SQL 存储 数据库
Python 的安全性和测试:什么是 SQL 注入攻击?如何防范 SQL 注入?
Python 的安全性和测试:什么是 SQL 注入攻击?如何防范 SQL 注入?
78 1
|
4月前
|
SQL 安全 网络安全
确保你的数据库安全:如何防止SQL注入攻击
确保你的数据库安全:如何防止SQL注入攻击
|
4月前
|
SQL 存储 Java
如何避免SQL注入攻击?
如何避免SQL注入攻击?
|
2月前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
65 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
11天前
|
Java 开发者 前端开发
Struts 2:如何在大型项目中力挽狂澜,成就企业级应用开发的巅峰之作!
【8月更文挑战第31天】在本案例研究中,我们探讨了Struts 2框架在国际贸易管理系统(ITMS)中的应用,展示了其在大型项目中的优势与实践经验。Struts 2凭借其强大的表单处理、灵活的Action配置、拦截器机制及国际化支持,成为构建可扩展、高性能Web应用的理想选择。文章详细介绍了RESTful URL设计、Ajax集成、文件上传与下载等功能实现,并分享了性能优化、安全措施及遇到的问题与解决方案,为开发者提供了宝贵的参考。通过持续集成与新技术的应用,我们不断优化系统,提升开发效率与竞争力。
22 0
|
22天前
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
|
3月前
|
SQL 安全 Java
java的SQL注入与XSS攻击
java的SQL注入与XSS攻击
90 2
|
3月前
|
SQL 安全 Java
Spring Boot中的跨站点脚本攻击(XSS)与SQL注入防护
【6月更文挑战第15天】在现代Web应用程序开发中,安全性是一个至关重要的课题。跨站点脚本攻击(XSS)和SQL注入是最常见的两种攻击类型,它们可以严重威胁到应用程序的安全。
443 0
|
4月前
|
SQL 安全 API
Django的安全性基石:防止SQL注入攻击
【4月更文挑战第15天】Django,Python的流行Web框架,以其内置的安全机制防范SQL注入攻击。通过ORM系统、安全查询API、用户输入验证和CSRF保护,确保应用安全。开发者应遵循最佳实践,如使用ORM、严格验证输入、及时更新库和限制敏感数据访问,以增强安全性。
|
SQL Linux 数据库
如何保护 Linux 数据库免受 SQL 注入攻击?
如何保护 Linux 数据库免受 SQL 注入攻击?
144 4
如何保护 Linux 数据库免受 SQL 注入攻击?