我最近了解到,调用不受信任的URL$.getJSON()是不安全的.怎么样$.get()?$.get()当URL参数来自不受信任的来源时,jQuery是否可以安全地调用,或者这是不安全的?
这出现在我正在进行的安全代码审查中,以检查XSS漏洞.示例代码模式:
$.get(url, function (...) { ... })
Run Code Online (Sandbox Code Playgroud)
如果攻击者url恶意选择此代码模式是否会创建XSS漏洞?
请假设该函数将安全地处理来自AJAX请求的响应,并且url来自不受信任的来源(例如,其他一些用户)并且可以完全由对手控制.
我关注的是:如果url被攻击者选中,攻击者是否可以选择恶意URL(例如,包含callback=?并指向他们自己的站点,或类似的东西)导致jQuery猜测数据类型应该是JSONP,启用JSONP,在文档中插入脚本标记,并以与getJSON()相同的方式引入XSS漏洞?(因为我没有传递一个明确的dataType参数$.get(),jQuery会猜测数据类型,如文档中所述.我不确定它的安全含义是什么.)
我在代码审查中遇到了这种代码模式,我试图了解它是否是一个潜在的漏洞.我不是在寻找可以编写代码的替代方法; 相反,我想知道这种代码模式是否安全.
由于威胁模型有点棘手,让我举一个例子来帮助更好地理解这一点.假设Bob是该服务的用户,他可以提供与其个人资料相关联的URL.假设当Alice在浏览器中访问Bob的个人资料页面时,页面上的Javascript代码会获取Bob提供的URL并将其作为参数传递给$.get().问题是,这样安全吗?鲍勃可以用它来攻击爱丽丝吗?Bob可以触发Alice的浏览器执行任意的Javascript代码,拥有Alice的所有权力吗?正如相关问题所解释的那样,$.getJSON()在这种情况下是不安全的 - 但是呢$.get()?它也不安全,还是安全的?
由于我收到了一些澄清请求,让我尝试以不同的方式解释/提出问题.假设我正在进行代码审查以检查某些Javascript代码是否包含任何XSS漏洞,我看到以下代码行:
$.get(url, function(resp) { /* do nothing */ });
Run Code Online (Sandbox Code Playgroud)
假设我知道url攻击者可以完全控制它.这是否自动成为XSS漏洞?或者这总是安全吗?或者如果答案是"它取决于",它依赖于什么?
或者,另一种思考方式.假设我正在进行代码审查,我看到以下代码行:
$.get(url, f);
Run Code Online (Sandbox Code Playgroud)
假设我知道url攻击者可以完全控制它.我需要检查什么,以验证这是否安全(没有XSS错误)?我知道我需要检查代码f是否安全地处理响应,因为如果f不小心它可能会引入XSS错误.我的问题是:我唯一需要检查的是什么?或者这个代码模式总是一个XSS漏洞,无论f编码方式如何?
最近我发现以下代码在几个主要编译器上编译,然后在运行时抛出:
std::cout << std::format("{:*<{}}", 10, "Hello") << std::endl;
Run Code Online (Sandbox Code Playgroud)
terminate called after throwing an instance of 'std::format_error'
what(): format error: argument used for width or precision must be a non-negative integer
Run Code Online (Sandbox Code Playgroud)
它会抛出异常,因为“10”应该出现在“Hello”之后,而不是之前。
但明显的问题是:为什么它在编译时没有失败?我的理解是,这些参数将在编译时进行类型检查,显然 aconst char*不能用作宽度说明符。为什么这不是编译错误?
如果您不明白为什么这会令人困惑,请知道 的第一个参数std::format()是 type std::format_string<...>。此类型在编译时采用字符串文字/字符串视图(由于其consteval构造函数),并在编译时读取给定字符串的内容以查看格式参数是否与格式字符串匹配。因此,保证不会std::format("{}");编译,因为字符串“{}”在编译时被读取为格式说明符,但类型列表显示没有传递任何参数,那么该空间中会放入什么?
我跑过以下样本面试问题.我该如何解决?
假设我们有一个数组a1,a2,...,an,b1,b2,...,bn.
目标是在O(n)时间和O(1)空间中将此数组更改为a1,b1,a2,b2,...,an,bn.换句话说,我们需要一个线性时间算法来修改数组,只需要不超过一定量的额外存储空间.
我正在使用远程git托管服务(Svnrepository.com).我可以在使用git 1.7.x作为客户端时成功访问git存储库,但是一旦我将客户端升级到git 1.8.x,我就无法再推送:推送挂起.托管服务的支持声称这是因为他们使用的是不支持1.8版的旧版git服务器.
根据要求,这里有一个跟踪GIT_TRACE=1.看起来它在运行时挂起git-http-push:
$ GIT_TRACE=1 git push -v
trace: built-in: git 'push' '-v'
Pushing to https://secure2.svnrepository.com/redacted/redacted/
trace: run_command: 'git-remote-https' 'origin' 'https://secure2.svnrepository.com/redacted/redacted/'
trace: run_command: 'http-push' '--helper-status' '--verbose' 'https://secure2.svnrepository.com/redacted/redacted/' 'refs/heads/master:refs/heads/master'
trace: exec: 'git' 'http-push' '--helper-status' '--verbose' 'https://secure2.svnrepository.com/redacted/redacted/' 'refs/heads/master:refs/heads/master'
trace: exec: 'git-http-push' '--helper-status' '--verbose' 'https://secure2.svnrepository.com/redacted/redacted/' 'refs/heads/master:refs/heads/master'
trace: run_command: 'git-http-push' '--helper-status' '--verbose' 'https://secure2.svnrepository.com/redacted/redacted/' 'refs/heads/master:refs/heads/master'
Run Code Online (Sandbox Code Playgroud)
它在最后一行输出后挂起.(如果你愿意,你也可以看到一丝这里我设置都GIT_TRACE=1和GIT_CURL_VERBOSE=1.)
我最近发现了笔画宽度变换,如以下研究论文所述:
该算法用于从自然场景中检测和提取文本.
但是,我找不到任何实现,从文章中我发现很难确定算法的所有细节,所以我可以在实践中实现它.有谁知道这个算法是否在系统中实现并在实践中使用?是否有C#或Java实现?
我需要在Javascript中生成加密安全的伪随机数.我知道window.crypto.getRandomValuesAPI,它完全符合我的要求.但是,我也知道它是在最近(2011年左右)推出的.
我可以安全地假设window.crypto.getRandomValues存在,或者使用它会在某些浏览器上引入兼容性问题吗?是否有任何主要(广泛使用)的浏览器不支持window.crypto.getRandomValues(包括移动或桌面浏览器),如果有,我需要担心哪些?我很高兴得知有足够的支持,我不再需要担心回退方法,如果确实如此.
Android定义了第三方应用可以请求的一组权限. 权限按敏感度分类; 大多数权限是"正常"或"危险".在不提示用户的情况下自动授予正常权限; 安装应用程序并要求用户同意授予用户时,会向用户显示危险权限.
问题:对于我想到的任何特定Android权限,我如何判断它是正常权限还是危险权限?是否有危险权限列表和正常权限列表?
(我知道第三方应用程序可以声明自己的权限.我只是询问标准权限.我知道可能无法获得100%完整的列表.我只是在寻找尽力而为;某些东西总比没有好.)
对于相关但不同的问题,请参阅 我在哪里可以获得Android权限列表(但是,这是一个不同的问题;它不是正常与危险的区别,我不一定需要完整的列表).
我试图推动一些变化,但git push挂起.当我跑步时git push,我看不到任何输出,似乎没有任何事情发生.没有任何活动top,也没有任何迹象表明发生任何事情.
我不控制git托管服务.我正在使用HTTPS URL.我相信托管服务使用的是哑的HTTPS,而不是git的"智能HTTP"协议.在客户端,我使用Mac OS X,并且我已经通过Homebrew安装了git 1.8.1.1(但是使用Xcode的命令行工具中包含的git版本似乎没有什么区别).注销并重新登录似乎没有帮助.我可以从另一个Linux盒子中拉出并推送到这个托管服务/存储库.
下面是一些调试输出,显示git push客户端发出PROPFIND请求后挂起,HTTP/1.1 100 Continue从服务器获取响应,然后没有任何反应:它只是卡住了.
我该如何工作?我可以尝试任何故障排除步骤吗?
$ GIT_CURL_VERBOSE=1 git push -v
Pushing to https://secure2.svnrepository.com/redacted/redacted/
* About to connect() to secure2.svnrepository.com port 443 (#0)
* Trying 67.228.18.88...
* Connected to secure2.svnrepository.com (67.228.18.88) port 443 (#0)
* Connected to secure2.svnrepository.com (67.228.18.88) port 443 (#0)
* SSL connection using DHE-RSA-AES256-SHA
* Server certificate:
* subject: C=US; OU=Domain Control Validated; CN=secure2.svnrepository.com
* start date: 2012-01-09 16:16:59 GMT …Run Code Online (Sandbox Code Playgroud) $.getJSON()使用来自不受信任的来源(例如另一个用户)的URL参数调用jQuery是否安全?换句话说,$.getJSON()使用不受信任的URL 调用是否安全?我会小心不要相信响应并安全地处理响应,但是呼叫本身是否会带来安全风险?
换句话说,我说的是:
$.getJSON(url_from_user, function(...) { ... handle response safely ...});
Run Code Online (Sandbox Code Playgroud)
要么
$.getJSON('http://evil.com/foo.json', function(...) {...});
Run Code Online (Sandbox Code Playgroud)
如果某个不受信任的用户为url_from_user某个恶意控制该evil.com网站的恶意值提供恶意值,这是否允许代码注入或XSS ?同样,假设返回的任何JSON对象都将被安全地处理.
getJSON的文档没有说明这种情况是否安全.逻辑上,我希望这个场景是安全的,因为我希望jQuery的实现通过XHR下载JSON对象的文本,使用安全的JSON解析器解析此文本,然后返回JSON对象.
但是,在查看jQuery源代码之后,我对这是否安全存有疑问.浏览jQuery的源代码,看起来这种情况可能会允许XSS.getJSON()的代码有点复杂(参见src/ajax.js),但它似乎选择了"transport"然后用它来发送AJAX请求.我看到src/ajax/script.js注册了一个名为"script tag hack transport"的传输.此传输大致如下:它向文档添加脚本标记,例如<script src="http://evil.com/foo.json">,并注册在下载的脚本执行时运行的onload处理程序.换句话说,如果站点由攻击者控制,"脚本标记黑客传输"从根本上是不安全的:它将攻击者控制的脚本包含在文档中并执行它.除了脚本标记hack传输之外,还有一个使用浏览器的XMLHttpRequest()API的XHR传输.我很难遵循扭曲的逻辑,该逻辑确定将使用"脚本标记黑客"传输的条件.
那么,回到我原来的问题,$.getJSON()使用用户提供的URL 调用是否安全?如果在某些情况下它可能不安全,在什么条件下(例如浏览器版本)是安全/不安全的?
security ×3
git ×2
jquery ×2
json ×2
xss ×2
ajax ×1
algorithm ×1
android ×1
arrays ×1
c# ×1
c++ ×1
cryptography ×1
extraction ×1
fmt ×1
getjson ×1
git-push ×1
java ×1
javascript ×1
ocr ×1
permissions ×1
permutation ×1
random ×1
sat ×1
z3 ×1
z3py ×1