- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 rails 5.2.1 内容安全策略 DSL 实现 CSP。我的策略设置为:
Rails.application.config.content_security_policy do |policy|
policy.default_src :self, :https
policy.connect_src :self
#...
policy.script_src :self
end
# If you are using UJS then enable automatic nonce generation
Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
<%= csp_meta_tag %>
在我的
application.html.erb
nonce: true
标记到任何内联脚本以使它们满足策略。我已经做到了,它按预期工作。但是,我无法维护现有的 AJAX 样式功能。例如,我有类似的东西(注意
remote: true
):
# index.html.erb
<%= link_to create_object_path, id: "#{object.code}",method: :post, remote: true do %>
<button type="button">Create object</button>
<% end %>
def create
@object = current_user.object.create
respond_to do |format|
if @object
format.js
else
redirect_back
format.html
end
end
end
*.js.erb
文件
$("#<%= @object.service.id %>").text("Added!");
"Added"
我添加到 DOM 的成功消息。我没有在控制台中看到任何错误,所以我不确定从这里去哪里。
*.js.erb
的内容。文件和这些脚本标签不包含随机数。或者,它是不匹配的。
最佳答案
我遇到了类似的问题。在我的例子中,它并没有拒绝运行 js.erb 文件本身,而是通过使用 render
来拒绝运行嵌套在该文件中的模板中的脚本。 .因此,此答案可能对您的具体情况有有限的实用性。也就是说,我确实尝试使用 Rails 6.1.1 版重现您的问题,但不能。
但是,即使您克服了仅运行 .js.erb 文件的初始障碍,您仍然会遇到嵌套脚本的问题:如果您的 .js.erb 文件 render
s 包含 script
的模板标签。该脚本不会运行,因为它源自的请求为其分配了一个新的随机数,该随机数与元标记中的随机数不匹配。
因此,对于那些像我一样从搜索引擎来到这里的人来说,这是我追求的一般策略,以使异步嵌入式 JS 与 CSP 一起用于该嵌套案例并假设 .js.erb 文件本身运行。以您的案例为例:
document.getElementById('<%= object.code %>').addEventListener('click', e => {
e.preventDefault(); // So we don't send two requests
fetch('<%= create_object_path %>', {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
body: JSON.stringify({
nonce: document.getElementsByName('csp-nonce')[0].content
})
});
});
这会将来自元标记的随机数以 nonce
的形式发送到服务器。范围。remote: true
从你的链接这个工作。当然,这个脚本本身需要是“nonced”,否则它不会运行!@nonce
Controller 中的实例变量:@nonce = params[:nonce]
<%= javascript_tag nonce: @nonce || true do %>
...
<%= hidden_field_tag :nonce %>
document.getElementById('id_of_submit_button').addEventListener('click', async e => {
document.getElementById('nonce').value = document.getElementsByName('csp-nonce')[0].content;
});
在这种情况下,您不想阻止事件的默认行为,因为您希望提交表单。HTTP_TURBOLINKS_REFERRER
header 存在,您检查
request.xhr?
.只知道
starting in newer Rails versions ,
remote: true
没有为
request.xhr?
设置必要的 header 工作了。但由于您使用的是 5.2.1,它可能对您有用。
关于javascript - 使用 CSP 的 nonce 策略响应 *.js.erb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54017005/
我正在尝试检查 Entry 中是否存在重复项,并使用内联消息提醒用户该数字存在。 $(document).ready(function(){ $("#con1").blur(function(
我有一个基于类的 View 。我在引导模式上使用 Ajax。为了避免页面刷新,我想使用此类基于 View 返回 JSON 响应而不是 HTTP 响应,但我只看到了如何为基于函数的 View 返回 JS
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个大型内部企业基于 Web 的应用程序在 IIS6 上运行 ASP.NET 3.5,生成 401 个“未经授权”响应,然后是 200 个“Ok”响应(如 Fiddler 所述)。我知道为什么会发
感谢您研究我的问题。 我有一个node/express服务器,配置了一个server.js文件,它调用urls.js,而urls.js又调用 Controller 来处理http请求,所有这些都配置相
当我使用以下命令时,我得到正确的 JSON 响应: $ curl --data "regno=&dob=&mobile=" https://vitacademics-rel.herokuapp.co
我有一个非常简单的 RESTful 服务,它通过 POST 接收一些表单数据,其目的是在云存储(Amazon S3、Azure Blob 存储等)中简单地保留文本主体(具有唯一 ID)作为一个文件..
UDP 不发送任何 ack,但它会发送任何响应吗? 我已经设置了客户端服务器UDP程序。如果我让客户端向不存在的服务器发送数据,那么客户端会收到任何响应吗? 我的假设是; 客户端 --> 广播服务器地
我有一个电梯项目,其中 有一个扩展 RestHelper 的类,看起来像这样 serve{ "api" / "mystuff" prefix { case a
我们正在寻求覆盖 Kong 错误响应结构并编写自定义消息(即用我们的自定义消息替换“超出 API 速率限制”、“无效的身份验证凭据”等)。 我们要找的错误响应结构(代码是自定义的内部错误代码,与HTT
我正在尝试监听 EKEventStoreChangedNotification 以检查当我的应用程序处于后台时日历是否已更改。 我在 View Controller 的 initWithNibMeth
我了解 javascript,并且正在学习 ASP.NET C# 我想要做什么(完成的是javascript): document.getElementById('divID-1'
是否可以过滤所有 har 对象并仅获取 POST 请求/响应?也许在初始化 BrowserMobProxyServer 期间是这样做的方法?我需要将 har 对象保存到文件中并上传到 har 查看器。
我正在尝试向 Oauth 的 API 发送响应。遗憾的是,Symfony2 文档在解释 $response->headers->set(...); 的所有不同部分方面做得很差。 这是我的 OauthC
我正在尝试测试用例来模拟 api 调用,并使用 python 响应来模拟 api 调用。 下面是我的模拟, with responses.RequestsMock() as rsps: url
在尝试在 Haskell 中进行一些领域驱动设计时,我发现自己遇到了这个问题: data FetchAccessories = FetchAccessories data AccessoriesRes
我正在与 ANT+ USB 棒连接,并用项目 react 器替换我自己天真的“MessageBus”,因为它看起来非常合适。 USB接口(interface)本质上是异步的(单独的输入/输出管道),我
我正在将项目迁移到AFNetworking 2.0。使用AFNetworking 1.0时,我编写了代码来记录控制台中的每个请求/响应。这是代码: -(AFHTTPRequestOperation *
我有以下代码段。 ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){
我有问题......我在 php 中有一个监听器脚本可以执行以下操作: if ($count != 1) {echo 'no';} else { echo "yes";} 因此它会回显"is"或“
我是一名优秀的程序员,十分优秀!