惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
A
About on SuperTechFans
Vercel News
Vercel News
L
LangChain Blog
B
Blog RSS Feed
Y
Y Combinator Blog
IT之家
IT之家
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
V
V2EX
博客园 - 三生石上(FineUI控件)
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
D
Docker
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
月光博客
月光博客

博客园 - 来自海边的一片云

Binary Tree Maximum Path Sum 解题注意 CodingTMD’s Reading List De Bruijn 序列生成 Word Ladder I ,II 解题思路 suduko及8皇后问题及相关问题的解题思路 leetcode Word Break II 解题思路 Search for a string in an infinite stream of input string. 内存管理 Permutations leetcode Clone Graph leetcode 开弓没有回头箭 combination sum leetcode Combinations leetcode 组合问题 word break leetcode LRU cache Leetcode 重新试着写blog Fuzz testing XML库的解析效率 Init()
SQL injection
来自海边的一片云 · 2007-08-02 · via 博客园 - 来自海边的一片云
 

最近自己折腾一个数据库的东西,自己研究了一下SQL injection.

SQL injection 看起来还是挺有意思。可以看看youtube 上的一个SQL injection的实例还是比较简单的。http://www.youtube.com/watch?v=MJNJjh4jORY

当然这是最基本的SQL injection了。这种最基本的问题一般都出在query的字段连接上。

SqlCommand cmd = new SqlCommand(
  
"SELECT ID, FullName FROM User WHERE Login='"
  
+ Login.Text
  
+ "' AND Password='" 
  
+ Password.Text 
  
+ "'");

 

这种类型的错误相当常见,在一般情况下这个SQL语句执行没有任何问题,但是如果往用户的密码框里填上

' OR ''='

那么这个验证就被跳过去了。

当然高级的injecition 需要不停的试最终找到你的sever种这样的bug 

具体的如何Injection 可以看后面的附件。

下面说一下如何尽可能地防止这种injection的发生:

1输入检查。相信所有的输入都是有害的!对所有接受的输入要检查,对非法数据进行休整使他变得合法(不一定正确).

2. 在编程上最好不要创建非类型安全的动态SQL语句,尽可能使用参数化的查询。

3.对上线的code都要做一个security review. 即使是小的更新也要做security review. 很多安全的漏洞发生在一个小更新上,这个更新太小了以至于让我们等到下次一起review吧。往往问题就出在这样的更新上,千里长堤毁于蚁穴。

4.尽量不要把机密资料以明文的形式存储在数据库中。密码之类的东西最好以单向hash的形式存储 。信用卡信息之类的东西尽量要加密。这样就算你的数据库被攻破了也能保证你的客户资料不会受到损失。

5. 用一些自动化测试来保证你的数据访问层和Web application能够抵御SQL injection的测试用例。这个对于需要经常更新的网站特别重要。能够有效防止你因为一个小的check in 而带来了安全漏洞。

6.不要在出错信息里泄露任何机密。

6.最小权限。确保你的Web application仅能访问必要的表。你的Web Application没有必要访问的表就必须确保他们无法被访问到。另外对于一些表能只给读权限就只给读权限。尽可能地限制Web application的访问权限。

Appendix :
1.SQL injection WhitePaper
2.深入分析SQL注入攻击及安全防范
3.How To: Protect from Form Injection Attacks with ASP.NET
4.How To: Protect from SQL Injection Attacks with ASP.NET