C# 黑客们需要了解哪些SQL注入技术

C# 黑客们需要了解哪些SQL注入技术,c#,asp.net,sql,security,C#,Asp.net,Sql,Security,我正在收紧我的web应用程序,我现在正在使用SQL。我已经有了sql参数、双撇号、剥离javascript和编码html。除了上面提到的事情之外,我还需要担心其他事情吗?如果你使用参数化查询,那么你不需要做你在文章中描述的任何事情。关于这个问题的讨论似乎很好 为了强调这一点,防止sql注入攻击的灵丹妙药是只通过参数化查询将用户输入传递到sql。确保所有输入都包含在引号中。如果你有像。。。已接受=1或年龄=30。。。你可能有一个安全漏洞:。。。接受=1;删除 编辑:是的,攻击者可以使用1英寸的删除

我正在收紧我的web应用程序,我现在正在使用SQL。我已经有了sql参数、双撇号、剥离javascript和编码html。除了上面提到的事情之外,我还需要担心其他事情吗?

如果你使用参数化查询,那么你不需要做你在文章中描述的任何事情。关于这个问题的讨论似乎很好


为了强调这一点,防止sql注入攻击的灵丹妙药是只通过参数化查询将用户输入传递到sql。

确保所有输入都包含在引号中。如果你有像。。。已接受=1或年龄=30。。。你可能有一个安全漏洞:。。。接受=1;删除


编辑:是的,攻击者可以使用1英寸的删除,但这对转义输入不起作用。

只有在使用用户数据动态生成查询时,才需要参数化查询

在oracle之类的东西上使用这些查询有很多好处,这也很有用

您可以做的另一件事是确保连接到数据库的用户拥有所需的最少权限

您可以在此处查看有关防止sql注入的一些建议:

根据您的偏执,您可以只使用存储过程来进行访问,但如果您需要进行动态查询,这将更加困难

对于select,您可以使用视图,这样就不可能使用该查询来更改数据库中的任何数据,除非视图上有触发器

另一个可以使用的页面如下:

但是,没有必要设置超出合理范围的安全性,因此您应该权衡您要保护的内容和距离


例如,加密你的一些列是否值得?这会导致更多的问题,比如如何保护密钥,但是如果你担心有人侵入你的机器并得到可能需要考虑的数据库文件。

< P>我建议下载自动化,让它先分析你的代码,你可以收获一些。廉价的低挂果实。

一个赛博朋克可以通过连接从uri查询获得一个perl外壳。3种解决方案是使用存储过程、preparedstatements或gql。从技术上讲,Javascript和HTML与SQL注入攻击无关,但它们是注入攻击

我不同意剥离,至少在没有通知用户您已经这样做的情况下是这样。首先,实际输入可能实际上是有效的,删除某些字符可能实际上会改变输入的语义,并且您通常无法在存储时确定值可能在哪个媒体下呈现。URL、LD呢AP、XML或文件路径注入攻击

你会发现很多安全“牧师”(我说是鹦鹉)有人认为,SQL注入最好的保护方法是从输入的数据中剥离可能导致损坏的字符。只要您不接受O'Brian作为exmaple的有效输入,这一点一直很好。如果他们鼓吹正确的编码,那会更好,因为所有这些努力都可能被用于广告穿上一大堆针剂

实际上,我曾经不得不处理一位MS安全专家编写的代码,他编写了如下代码:

userInput=userInput.Replace(“-”,”).Replace(“”,”)

公平地说,他是一个非常聪明的家伙,我相信他今天不会写这篇文章,但是你能看到“MyName-'-SELECT*FROM User”实际上是如何绕过这种保护的吗

只要不阻止有效值,就可以有一系列可以接受的字符和其他不能接受的字符。<也是一个有效的数学运算符,或者用户需要输入示例HTML代码。值的上下文决定什么是有效的,什么是无效的

然后,如果您得到一个包含不允许的字符的值,则向用户显示一个错误,告诉他们无效值,并要求他们在重新发送之前进行修复。这可以在以后省去很多麻烦,这与数据验证和确保程序功能以及安全性同样重要。是的,您需要检查this既可以在客户端保持通信量,也可以在服务器端防止攻击

然后,无论何时呈现值,都要对其进行适当的编码。参数化查询可以解决SQL注入问题,但它们不适用于呈现HTML、URL和javascript。正确的值SQL编码(例如您提到的双单引号)同样安全,在某些情况下更可取(假设您有合理的DBA,他们不坚持所有内容都必须是存储过程,并且允许正确编码的动态SQL)


还有一点,System.Web HTML和URL编码功能有一些缺陷。有一个Microsoft团队开发了反跨站点脚本库,解决了这些问题,并提供了更具体的编码选项。我认为它被称为反XSS或类似的东西。绝对值得一看。我想知道它是否被引入了Corpor参数化查询在很大程度上有助于防止坏蛋进入.Net 4?

中,但要确保它们背后没有奇怪的、可注入的动态sql混合物打开新的漏洞


另一个疯狂的边缘想法:不要运行流行的开源软件包,尤其是那些以p开头的语言编写的软件包。

我喜欢明确的“我正在改进这篇文章”“+1除了已使用的参数化查询之外,无需执行任何操作。所有的安全工作都已为您完成。尝试在参数后执行额外的工作来删除引号是完全没有用的。攻击者还可以只包含一个引号:
“DROP TABLE…
该死…这就是我花时间输入注释的结果:)雷克斯M,他已经说过他是t