0

我正在使用 asp.net mvc,我有一个弹出模式窗口,用户可以在其中输入一些文本并将其保存到数据库中。该文本也显示在屏幕上,从数据库中读取。

对于初学者,我想确保数据库中不会显示有害标签——我需要对输入进行编码/解码吗?目前,输入 alert('hello') 被保存到数据库中,当再次显示时,它显示为文本 - 所以我想我没问题,但想要确认。

一个问题,当用户保存它时,我也会使用这个文本,使用 javascript,将它添加到页面上的 div 并使用上面的文本,这确实会触发弹出警报。我怎样才能防止这种情况?

我正在使用不同的文本拉丁文、西里尔文等,所以不想要任何不寻常的字符!

4

2 回答 2

0

您应该应用删除所有非法字符的递归。用户不需要的任何东西都应该是非法的。如果只应使用字母和数字,请去掉所有特殊字符。确保递归地应用它。完成后,您应该对所有输入进行 HTML 编码,以使其(大部分)无害。

不要仅依靠 HTML 编码来确保您的安全。有很多方法可以击败它,攻击者必须应对的层数越多,对他/她来说就越困难。

这个 SO 问题可能对您使用 HTML 编码有所帮助: 来自 Class Library 的 HtmlEncode

于 2013-04-25T02:28:06.653 回答
0

你试过标签吗?MVC 非常适合这种类型的标准验证,并且倾向于将标签折叠到<script>其中,除非该字段明确标记为[AllowHtml].

重要的是要区分不alert('hello')包含任何危险并且可以很好地进入数据库。

您直接将此文本作为 javascript 中的可执行文件放置一个问题。如果不是alert('hello')它是一个 ajax 调用,或者我最喜欢的有趣测试,document.write(). 当您说您正在使用 javascript 将文本添加到 div 时,它不应该执行该文本。将其保留为字符串,并确保.toString()在您担心它不是字符串的任何地方使用它。

于 2013-04-24T23:04:35.613 回答