zan*_*ona 10 database protection sql-injection escaping
昨天我和一个开发人员交谈,他提到了一些关于限制数据库字段插入的事情,比如,--(减去负数)等字符串.
在同类型的,我知道的是,是逃避HTML字符是一个不错的办法<,>等不--.这是真的?我担心--,++?它更像是神话还是旧东西?
非常感谢所有答案,这很容易理解,因为我对这一切都是新手.好吧,在这种情况下更具体一点,我们的讨论是关于和我们正在开发的C#ASP.NET MVC网站,因此有一个复杂的开放帐户表单中有重要信息,所以我不确定MVC是否使用Linq来与数据库的接口是否已经带有这种保护.所以如果有人能提供一些关于它的提示,那就太好了.再次感谢
避免SQL注入攻击的正确方法不是简单地禁止某些有问题的字符,而是使用参数化SQL.简而言之,参数化SQL会阻止数据库作为SQL命令的一部分执行原始用户输入,这会阻止执行"drop table"之类的用户输入.只是转义字符并不能阻止所有形式的SQL注入攻击,并且排除某些单词如"Drop"在所有情况下都不起作用; 可能存在某些字段,其中"Drop"是数据条目的完全有效部分.
你可以在这里找到关于paramaterized SQL主题的一些好文章:
https://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/
http://www.codeproject.com/KB/database/ParameterizingAdHocSQL.aspx
既然你提到你正在使用ASP.net我可以给你一些专门处理ASP中的SQL注入的链接.
这是一篇关于使您的ASP更安全的更一般的文章:http: //www.codeproject.com/KB/web-security/Securing_ASP_NET_Apps.aspx
当然,关于SQL注入的MSDN文章:http: //msdn.microsoft.com/en-us/library/ms998271.aspx
对于大多数允许用户将参数喷射到在数据库上执行的语句的网站,SQL注入是一种高安全风险.
一个简单的例子是:
输入字段"名称:_________
"SELECT * FROM tblCustomer WHERE Name = '" + nameInputField + "'"
Run Code Online (Sandbox Code Playgroud)
所以,如果我输入"Bob",我们就有了
"SELECT * FROM tblCustomer WHERE Name = 'Bob'"
Run Code Online (Sandbox Code Playgroud)
但如果我输入"'; DROP TABLE tblCustomer",我们最终会变得更加险恶
"SELECT * FROM tblCustomer WHERE Name = ''; DROP TABLE tblCustomer"
Run Code Online (Sandbox Code Playgroud)
有很多方法可以避免这些问题,许多方法都是用你正在使用的语言构建的 - 所以不要想到所有狡猾的可能性";"," - ","/*"等,试着用一些东西已经存在.
喊出你正在使用的语言,我相信我们可以告诉你如何避免这些攻击.
| 归档时间: |
|
| 查看次数: |
3458 次 |
| 最近记录: |