如何在使用JSF和RichEditor时避免跨站点脚本(XSS)攻击



我在全JSF平台上使用Rich Editor作为用户输入文本框。我正在努力避免XSS对此文本字段的攻击。

要求

  • 用户可以在文本框中输入任何字符
  • 富编辑器应该显示未编码的值或编辑器对于CCD_ 2不应该显示CCD_
  • 应避免使用跨站点脚本(XSS(

因此,问题是,由于我们必须正确显示值,我们将escape=false用于输出文本,但它随后变得容易受到XSS攻击。

我尝试使用jsoup来过滤HTML标记,但似乎输入会自动编码,无法使用jsoup。

所以我的问题如下。

  1. 富编辑器是否有更好的方法来避免XSS攻击用escape=false
  2. 当文本输入到达保存时,它看起来像是被编码的阶段,所以我无法使用jsoup进行过滤。JSF如何内部工作在编码和解码文本值方面。脚本在什么时候可以运行
  3. 如果它恰好在获得输入后被内部编码我需要担心XSS攻击吗
  4. 此外,还有一个软件Parse,它被用来拦截请求。这是一种常见的黑客工具吗?如何使用它来进行潜在的攻击,以及在当前情况下如何避免攻击。具体来说,如果一个人像这个软件对正常请求那样拦截请求,会有什么不同吗

您应该在输出富文本的任何页面上实现内容安全策略。

这允许您有效地阻止浏览器执行内联脚本。目前,Chrome和Firefox等现代浏览器都支持它。

这是通过页面中的HTTP响应标头来完成的。

例如

Content-Security-Policy: script-src 'self' https://apis.google.com

如果用户设法将内联JavaScript注入到您的页面中,它将停止执行(它将被忽略并发出警告(,但将允许脚本标记引用您自己的服务器或https://apis.google.com。这可以根据您的需要进行定制。

您可以将其与HTML消毒剂结合使用,以去除任何恶意标签,从而实现安全带和大括号的方法,并保护不支持CSP的浏览器。

谷歌现在已经在Gmail中实现了CSP,以确保收到的任何HTML电子邮件都不会试图发动XSS攻击

更新:上次检查时,Gmail中的CSP似乎很弱,允许script-src具有unsafe-inlineunsafe-eval:

内容安全策略:脚本srchttps://clients4.google.com/insights/consumersurveys/https://www.google.com/js/bg/"self">"unsafe-inline"unsafe eval">https://mail.google.com/_/scs/mail-static/https://hangouts.google.com/https://talkgadget.google.com/https://*.talkgadget.google.com/https://www.googleapis.com/appsmarket/v2/installedApps/https://www-gm-opensocial.googleusercontent.com/gadgets/js/https://docs.google.com/static/doclist/client/js/https://www.google.com/tools/feedback/https://s.ytimg.com/yts/jsbin/https://www.youtube.com/iframe_apihttps://ssl.google-analytics.com/https://apis.google.com/_/scs/abc-static/https://apis.google.com/js/https://clients1.google.com/complete/https://apis.google.com/_/scs/apps-static/_/js/https://ssl.gstatic.com/inputtools/js/https://ssl.gstatic.com/cloudsearch/static/o/js/https://www.gstatic.com/feedback/js/https://www.gstatic.com/common_sharing/static/client/js/https://www.gstatic.com/og/_/js/;框架srchttps://clients4.google.com/insights/consumersurveys/https://calendar.google.com/accounts/"自我"https://accounts.google.com/https://apis.google.com/u/https://apis.google.com/_/streamwidgets/https://clients6.google.com/static/https://content.googleapis.com/static/https://mail-attachment.googleusercontent.com/https://www.google.com/calendar/https://calendar.google.com/calendar/https://docs.google.com/https://drive.google.comhttps://*.googleusercontent.com/docs/securesc/https://feedback.googleusercontent.com/resources/https://www.google.com/tools/feedback/https://support.google.com/inapp/https://*.googleusercontent.com/gadgets/ifrhttps://hangouts.google.com/https://talkgadget.google.com/https://*.talkgadget.google.com/https://www-gm-opensocial.googleusercontent.com/gadgets/https://plus.google.com/https://wallet.google.com/gmail/https://www.youtube.com/embed/https://clients5.google.com/pagead/drt/dn/https://clients5.google.com/ads/measurement/jn/https://www.gstatic.com/mail/ww/https://www.gstatic.com/mail/intl/https://clients5.google.com/webstore/wall/https://ci3.googleusercontent.com/https://apis.google.com/additnow/https://www.gstatic.com/mail/promo/https://notifications.google.com/https://mail-payments.google.com/mail/payments/;报表urihttps://mail.google.com/mail/cspreport;对象srchttps://mail-attachment.googleusercontent.com/swfs/https://mail-attachment.googleusercontent.com/attachment/

最新更新