C# 林氏;SQL注入

C# 林氏;SQL注入,c#,sql,linq,C#,Sql,Linq,可能重复: 我正在使用LINQ访问sql数据库。以下代码安全吗 var addRec = (from p in db.5544 where p.ID == newAddID select p).Single(); addRec.Address1 = comAddTxt1.Text;

可能重复:

我正在使用LINQ访问sql数据库。以下代码安全吗

 var addRec = (from p in db.5544
                          where p.ID == newAddID
                          select p).Single();

            addRec.Address1 = comAddTxt1.Text;                                                                             //create address record
            addRec.Address2 = comAddTxt2.Text;
            addRec.Address3 = comAddTxt3.Text;
            addRec.Address4 = comAddTxt4.Text;
            addRec.PostCode = pstCdeTxt.Text;
            addRec.Town = twnTxt.Text;
            addRec.County = cntyTxt.Text;
            addRec.Country = cntComBox.SelectedItem.Text;

            db.SubmitChanges();

谢谢,

要降低XSS攻击的风险,您应该在web应用程序中从数据库检索时对数据进行HTMLEncode。

要降低XSS攻击的风险,您应该在web应用程序中从数据库检索时对数据进行HTMLEncode。

我建议尝试调用存储过程并将值作为参数发送相反,它可以为您提供参数检查。例如,如果将“@Address1”声明为varchar(200),则如果参数包含sql语句,则存储过程将不会执行


您还可以在时间之前对字段进行检查,方法是将其与正则表达式进行比较,但这可能需要付出更多的努力,而且仍然不如使用存储过程那样安全。

我建议尝试调用存储过程并将值作为参数发送,这样它就可以为您提供参数检查。例如,如果将“@Address1”声明为varchar(200),则如果参数包含sql语句,则存储过程将不会执行


您还可以通过将字段与regex表达式进行比较,在检查之前对字段进行检查,但这可能需要付出更多的努力,而且仍然不如使用存储过程那样安全。

是的,它不会受到SQL注入攻击


不,它可能不安全,不会受到其他形式的攻击,例如:跨站点脚本等(如果相关)。

是的,它不会受到SQL注入攻击



不,它可能不安全,不会受到其他形式的攻击,例如:跨站点脚本等,如果相关的话。

。。。如果这是一个web应用程序。。。如果这是一个web应用程序;)我认为数据库应该包含实际的纯文本,而不是绑定到特定输出格式的编码。如果你想支持另一种格式(例如PDF导出或类似格式),你会感到头疼。当然,除非输出的所有编码在应用程序中花费很长时间,而且您永远不需要纯文本。但在大多数情况下,这是不太可能的。LINQ使用SqlParameters-这些参数将净化并防止注入攻击。@rocky:这是错误的印象。只有在已知数据的预期使用者时,才能执行消毒。这就是为什么要在存储到SQL之前转义SQL参数,并在输出HTML之前对HTML特殊字符进行编码。早些时候这样做完全是误导。此外,我们所有的数据表明,这在任何情况下都不是一个web应用。。。。如果这是一个web应用程序。。。如果这是一个web应用程序;)我认为数据库应该包含实际的纯文本,而不是绑定到特定输出格式的编码。如果你想支持另一种格式(例如PDF导出或类似格式),你会感到头疼。当然,除非输出的所有编码在应用程序中花费很长时间,而且您永远不需要纯文本。但在大多数情况下,这是不太可能的。LINQ使用SqlParameters-这些参数将净化并防止注入攻击。@rocky:这是错误的印象。只有在已知数据的预期使用者时,才能执行消毒。这就是为什么要在存储到SQL之前转义SQL参数,并在输出HTML之前对HTML特殊字符进行编码。早些时候这样做完全是误导。此外,我们所有的数据表明,这在任何情况下都不是一个web应用程序;存储过程对IMO没有任何好处。除了数据库安全权限等,LINQ也完全安全,不会被注入;存储过程对IMO没有任何好处。除了数据库安全权限等。我如何防范这些其他形式的攻击?这取决于您的情况和应用程序,但一般来说,请清理和验证您的输入。我如何防范这些其他形式的攻击?这取决于您的情况和应用程序,但总的来说,要对你的输入进行消毒和验证。