我想知道如果一个脚本标签同时具有"src"和内联脚本.我试过下面的代码.
<script src="http://yui.yahooapis.com/2.8.1/build/yahoo/yahoo-min.js" type="text/javascript" charset="utf-8">
alert('hello');
</script>
<script type="text/javascript" charset="utf-8">
alert(YAHOO);
</script>
Run Code Online (Sandbox Code Playgroud)
它似乎从未在Firefox和Chrome中执行过"alert('hello')".我试图将src更改为指向不存在的URI."alert('hello')"也没有被执行.
那么,如果脚本标记中有src属性,则始终会忽略内联脚本?
我正在尝试在Django中实现条纹支付系统。要添加卡付款,我遵循了此链接中的指南。在Django模板中添加HTML标记以及CSS和JS代码作为单独的静态文件后,在Firefox中出现以下控制台错误:
Content Security Policy: The page’s settings blocked the loading of a resource at inline (“script-src”)
Run Code Online (Sandbox Code Playgroud)
我从上述错误消息中了解到的是,<script src="https://js.stripe.com/v3/"></script>JS文件包含指向其他JS文件的链接,而Firefox阻止了此类连接。应当注意,在此阶段,测试信用卡付款正在按预期方式工作,并且客户借记的金额已添加到我的条纹帐户的测试余额中。为了解决此阻塞问题,我遵循了此链接中的说明。因此,我meta在Django模板中添加了以下标记:
<meta http-equiv="Content-Security-Policy" content="connect-src https://api.stripe.com; frame-src https://js.stripe.com https://hooks.stripe.com; script-src https://js.stripe.com" />
Run Code Online (Sandbox Code Playgroud)
添加上述Content-Security-Policy指令后,Firefox控制台不再显示上述阻止错误,但是这次我的静态JS文件被阻止了。我修改了如下指令以允许我的JS文件('self在'script-src'指令中添加了' ):
<meta http-equiv="Content-Security-Policy" content="connect-src https://api.stripe.com; frame-src https://js.stripe.com https://hooks.stripe.com; script-src 'self' https://js.stripe.com" />
Run Code Online (Sandbox Code Playgroud)
并且这一次之前提到的内联脚本阻止错误再次出现在Firefox控制台中。:)
您能帮我解决这个问题吗?关于Firefox控制台错误的原因,我的理解正确吗?为什么实施的解决方案不起作用?
编辑
考虑到付款按预期进行并且Chromium浏览器未在开发人员工具上记录任何错误,难道仅仅是Firefox的错误?
django firefox inline-scripting stripe-payments content-security-policy
我正在开发一个 Flask 应用程序,它使用 Flask-Talisman 来合并 CSP。我想在我的模板之一中创建一个内联脚本,而不是将“unsafe-inline”添加到 CSP 的“script-src”数组中(这可能对 XSS 攻击有害),我想使用哈希或允许脚本运行的随机数。我复制了 Opera 开发工具中控制台错误消息中给出的哈希值,并将其放入 CSP 的“script-src”数组中(在init .py 文件中)。但是,由于某种原因,CSP 不会接受哈希值,我不知道如何修复它。我也用随机数尝试过,也出现了同样的问题。这是控制台输出(出于安全原因我删除了哈希值):
The source list for Content Security Policy directive 'script-src' contains an invalid source: 'sha256-(hash goes here)'.
It will be ignored.
Run Code Online (Sandbox Code Playgroud)
这是init .py中的 CSP :
csp = {
"default-src": [
"'self'",
'https://www.youtube.com',
'https://img.youtube.com'
],
'script-src': [ 'sha256-(hash goes here)',
'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js',
'https://code.jquery.com/jquery-3.3.1.slim.min.js',
'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js'],
'style-src': ["'self'",'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css']
}
Run Code Online (Sandbox Code Playgroud) python hashcode inline-scripting flask content-security-policy
我必须将 CSP 标头添加到站点。问题是这是一个遗留代码,并且 HTML 中有很多内联脚本和样式。我无法使用“unsafe-inline”,因为目的是真正确保站点安全,并且该指令在 OWASP ZAP 工具扫描中给出了危险信号。我可以在某种程度上重构 HTML 和 JS 代码,但我有几个问题:
我尝试过使用固定随机数(仅适用于 POC)和哈希方式将内联脚本列入白名单。但由于所有 HTML 都是静态的,我如何为每个请求的脚本标记添加新的随机数(随机数的实际情况就是如此)?
在这种情况下,提供所有必需脚本和样式的哈希值是否比随机数更好?
如果我重构所有 HTML 的代码以从 body 标记中删除所有内联脚本并将代码添加到 head 中的单个脚本标记中,这是否意味着内联脚本被消除了?简而言之,in算作内联脚本吗?
我正在阅读Chrome扩展程序文档“ 内容安全策略(CSP) ”。它说:
内联JavaScript以及危险的字符串到JavaScript的方法(如eval)将不会执行。此限制禁止内联块和内联事件处理程序(例如
<button onclick="...">)。...
没有任何机制可以放宽执行内联JavaScript的限制。特别是,设置包含unsafe-inline的脚本策略将无效。这是故意的。
为什么嵌入式<script>块不安全?有人可以解释吗?如果您能举一些例子,那就更好了。
谢谢。
对某个网址(http://test.com)的POST请求如下:
{
"messageType": "OK",
"city": {
"Name": "Paris",
"Views": {
"1231": {
"id": 4234,
"enableView": false
},
},
"Views": [5447, 8457],
"messages": [{
"id": "message_6443",
"eTag": 756754338
}]
},
"client": {
"Id": 53,
"email": "test@test.us",
"firstName": "test",
"lastName": "test",
"id": 52352352,
"uuid": "5631f-grdeh4",
"isAdmin": false,
Run Code Online (Sandbox Code Playgroud)
我需要拦截它并将"isAdmin"更改为true.
对某个网址(https://test.com/profiles/ {Random_Numbers}/id})的GET请求有一个'响应'[decode gzip] JSON
{
"id": 0,
"Code": "Admin",
"display": "RRRR"
}
Run Code Online (Sandbox Code Playgroud)
我需要将"id"值更改为5.
所以基本上我需要编写一个可以完成这两个的脚本.
到目前为止,我已经尝试在Github中获取示例代码的帮助,但我没有预期的结果.(我是一个完整的菜鸟:\)并希望有人可以帮助我开始.提前致谢!
编辑:根据Github中的示例代码,modify_response_body.py:
from libmproxy.protocol.http import decoded
def start(context, argv):
if len(argv) != 3:
raise ValueError('Usage: -s "modify-response-body.py …Run Code Online (Sandbox Code Playgroud) 我想学习有关ASP.NET内联脚本的高级和基本知识
<img src="<%= Page.ResolveUrl("~")%>Images/Logo.gif"/>
Run Code Online (Sandbox Code Playgroud)
要么
<asp:Label ID="lblDesc" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Description")%>'></asp:Label>
Run Code Online (Sandbox Code Playgroud)
等等...
而且,<%%>和<%#%>之间的区别是什么?
从基本到高级实现这些用法,我在哪里可以找到?