2

我正在使用Asp.NET MVC 3和EF 4.1与SQL Azure。我有linq表达式以及存储过程。允许所有特殊字符并防止SQL注入/ XSS

现在,我需要允许输入所有特殊字符,如"';&<>/等,并将其保存在数据库中。但是,渲染时,它不应该呈现为HTML(即,应该呈现为文本)。我该如何防止SQL注入和XSS攻击?

我担心的是当我们在@Html.TextBoxFor@Html.EditorFor或标签中显示? 我不想妥协输入的字符类型。请提出如何解决这个问题?

+1

你有一个开发工作站/数据库,你可以尝试一些这些东西? Afaik,因为您使用的是EF,除了不使用EF *的地方(或者您没有使用SQL参数或其他地方),没有理由担心sql注入。例如,你的任何存储过程是否生成并执行任何sql?检查他们。同样,*我认为*编辑器和标签的内容通常是html编码的,这意味着当页面被解释为html时,内容*将被渲染为文本*。不过,我认为确认他们是htmlencode会很好。 – JayC 2013-03-21 17:46:09

回答

-1

您应该始终使用预准备语句来防止SQL注入。这允许您插入像单引号(')这样的元字符。最好的做法仍然是拒绝任何你不想要的东西,但听起来你已经定义了包含大多数键盘字符。尽管如此,您仍然可以拒绝高位ASCII和控制代码。

对于XSS,您需要HTML实体编码以HTML格式显示的用户来源的任何内容,而不管它在哪里使用。如果您在发送给用户之前进行编码(输出验证),则不必担心用户看到双重编码。

+0

HTML实体编码不足以防止XSS;看[这个答案](http://stackoverflow.com/a/70222/2489497) – 2015-12-29 13:30:03