是否有任何 HTTP header 可以为特定页面禁用 Javascript?
我的网站提供用户生成的 HTML 内容(这就是为什么我不能只使用 htmlenitities)并且我想防止脚本(JavaScript 注入(inject))。
我已经使用 HttpOnly-cookies 设置为仅在主域上进行身份验证,而用户内容仅显示在无法读取 cookie 的子域上。
问题是执行 JavaScript 的可能性仍然太多——例如使用像 onclick 这样的事件属性,Internet Explorer 甚至在 CSS 中有一个属性允许 JavaScript 执行(expression ) 这是我以前从未听说过的。我读到的另一个有趣的想法是抛出异常以阻止后续代码。
另一个想法是定义一个列表,其中包含所有允许的标签,另外还有一个包含每个允许的属性名称的数组,但这是一项非常艰巨的工作,我想这不会涵盖所有可能的注入(inject)。
我想我不是唯一遇到这个问题的人,所以有没有人知道覆盖所有可能有害代码的可能性 - 至少在现代浏览器中?
类似于 X-Scripting: disabled 的简单假想 header 将使生活变得更加轻松!
最佳答案
是的,有一个名为 Content Security Policy 的实验性 HTTP header 这允许您控制 JavaScript 的来源,这可以使 XSS 成为不可能。但是目前只有 Chrome 和 Firefox 支持。
启用 HttpOnly-cookies 是个好主意,但这将完全防止零 攻击。你仍然可以通过 reading CSRF tokens, and carrying out requests with an XHR 利用 XSS .
获取XSS的方法有很多种,像ShieldSeal这样的漏洞扫描器(向下)将找到(几乎)所有这些。 Skipfish是一个非常原始但免费的开源漏洞扫描器。这就是大多数 Web 应用程序处理广泛传播的漏洞的方式。 (我在 ShieldSeal 工作,我帮助构建了他们的漏洞扫描器,我热爱我的工作。)
当发现问题时,您应该使用 htmlspecialchars($var) 或 htmlspecialchars($var, ENT_QUOTES) 来清理输入。 ENT_QUOTES 可以防止攻击者引入 onclick 或其他 JavaScript 事件。
关于php - 禁用特定页面上的 Javascript 执行 (HTML/PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483638/
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json