我正在尝试开发一个安全的 Web 应用程序,它可以接受表单数据,将其编码到数据库中以消除跨站点脚本问题,然后在其他网页上很好地格式化它。
表单数据正在使用编码
HttpUtility.HtmlEncode('It's my wedding!')
这种工作的一个例子是有人输入“这是我的婚礼!” 进入一个文本框。这将进入格式化为的数据库:
这是我的婚礼!
如果我随后将其从数据库中拉出并使用 .NET 文字控件显示它,它的显示方式与此完全一样,撇号仍然在屏幕上进行编码。
Web 浏览器将 & 解释为 & 符号,将 © 解释为版权符号 - 他们为什么不将代码 ' 解释为撇号?
说我然后使用:
HttpUtility.HtmlDecode('It's my wedding!');
这将解决我的撇号问题,但是如果我在有人设法将恶意 javascript 注入此字段时使用 HtmlDecode 方法,例如:
It's my wedding!<script type="text/javascript">alert('XSS!');</script>
它还将解码编码的 javascript,然后执行攻击。如果是这种情况,为什么我们首先使用 HttpUtility.HtmlEncode() ?
我在http://wpl.codeplex.com/看到有人使用 Microsoft AntiXss 库,但由于用户无法修改它提供的白名单,它似乎收到了关于其质量和有效性的可怕评论。
你应该怎么做才能安全地编码 HTML 并允许它显示同时仍然防止 XSS 攻击?剥离/编码标签是唯一的解决方案吗?
大家以前是怎么处理的?
谢谢!
卡尔