我正在构建RESTful JSON api,我担心json数据被盗和跨站点请求伪造.
为解决这两个问题而创建的一个很好的解决方案是Origin http标头.但是我担心这种方法与所有现代浏览器都不兼容.这是一个有效的问题吗?由于兼容性问题,Origin http标头是否无用?在执行HTTP引用检查时是否应该考虑原点?
最近我读了一些关于'JSON劫持'的文章,其中一些是在这里.
所以,我尝试在我的浏览器,Chrome 17(dev),Firefox 8和IE8上进行以下操作.
但我无法对(文字)JSON数据做任何事情.
"JSON劫持"问题是否都在现代浏览器上解决了?或者我该如何重现它?
众所周知,当旧浏览器的Array ctor和Object ctor重载时,Facebook使用javascript响应(JS,而不是json)作为前缀while(1)&for(;;);,以防止脚本标签窃取json数据。
但是从最近的尝试来看,似乎不再是这种情况了(对于朋友列表,我确定它已经被使用了)
注意,现在,content-type是:
content-type: application/octet-stream
但是他们为什么这样做呢?现在安全吗?(我知道这是针对较旧的浏览器的,但仍然...)。
我知道的[..]问题是有问题的。但是{..}ctor呢?
题:
Facebook为什么要删除无限循环?以及他们现在如何缓解json劫持?
我的意思是,如果<script>tag尝试获取“ getFiriends”列表,现在会发生什么?(在非常老的浏览器中)
NB
值得一提的是,还有其他答案带有无限循环{..}!:
同样在这里(对象,无限循环)
如果您浏览某些ISO页面(例如此页面)并在鼠标悬停在项目上时查看网络通信,则JSON响应始终for(;;);在使用实际JSON标记之前开始.
除了试图惩罚使用eval()解析JSON的人之外,还有一个很好的理由吗?例如,它是防御某个攻击媒介的最佳做法吗?
只是对https://medium.com感到好奇,我看到他们在搜索页面上发出了自动ajax GET请求,我打开了萤火虫(出于好奇),并得到如下结果:
(我输入了搜索词组sen以触发GET对https://medium.com/search/all?q=sen的请求。请注意,如果您打开它,则它仅会收到ajax请求,因此无法正常工作)
])}while(1);</x>{"success":true,"payload":{"value":{"posts":[{"id":"748b78360917","versionId":"9fbac25a3c7c","creatorId":"29fed3d34b82","homeCollectionId":"e196dfdf4b5d","title":"Nous sommes des clients, pas des usagers. Et ça change tout" // MORE JSON RESPONSE FROM SERVER....
现在的问题不在于JSON零件,我想知道])}while(1);</x>响应中的含义是什么?目的是什么?
更新,
我知道这while(1)是无限循环的,但是为什么要这样做呢?
更新 我读了类似的问题,现在我知道使用'while(1)'是为了防止json劫持,但是''])} while(1);' 部分仍然令人困惑,为什么要使用'])}'和''?'while(1)'还不够吗?
我试图从以下网站获取每个 href 元素内的不同值: https: //www.bmv.com.mx/es/mercados/capitales
\nhref对于HTML 文件中的每个不同元素,应有 1 行与提供的标题上的每个字段相匹配。
这是我试图抓取的 HTML 部分之一:
\n\n <tbody>\n \n <tr role="row" class="odd">\n<td class="sorting_1"><a href="/es/mercados/cotizacion/1959">AC\n \n</a></td><td><span class="series">*</span>\n</td><td>03:20</td><td><span class="color-2">191.04\n\n</span></td><td>191.32</td>\n<td>194.51</td>\n<td>193.92</td>\n<td>191.01</td>\n<td>380,544</td>\n<td>73,122,008.42</td>\n<td>2,793</td>\n<td>-3.19</td><td>-1.64</td></tr><tr role="row" class="even">\n <td class="sorting_1"><a href="/es/mercados/cotizacion/203">ACCELSA</a>\n </td>\n <td><span class="series">B</span>\n </td><td>03:20</td><td>\n <span class="">22.5</span></td><td>0</td>\n <td>22.5</td><td>0</td><td>0\n\n </td><td>3</td><td>67.20</td>\n <td>1</td><td>0</td><td>0</td></tr>\n <tr role="row" class="odd">\n <td class="sorting_1">\n <a href="/es/mercados/cotizacion/6096">ACTINVR</a></td>\n <td><span class="series">B</span></td><td>03:20</td><td>\n <span class="">15.13</span></td><td>0</td><td>15.13</td><td>0</td>\n <td>0</td><td>13</td><td>196.69</td><td>4</td><td>0</td>\n <td>0</td></tr><tr role="row" class="even"><td class="sorting_1">\n <a href="/es/mercados/cotizacion/339083">AGUA</a></td>\n <td><span class="series">*</span>\n </td><td>03:20</td><td>\n <span class="color-1">29</span>\n </td><td>28.98</td><td>28.09</td>\n <td>29</td><td>28</td><td>296,871</td>\n <td>8,491,144.74</td><td>2,104</td><td>0.89</td>\n <td>3.17</td></tr><tr role="row" class="odd"><td class="sorting_1">\n <a href="/es/mercados/cotizacion/30">ALFA</a></td><td><span class="series">A</span></td>\n <td>03:20</td>\n <td><span class="color-2">13.48</span>\n </td><td>13.46</td>\n <td>13.53</td><td>13.62</td><td>13.32</td>\n <td>2,706,398</td>\n …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以存储 foreach 循环的结果。我不知道如何更详细地解释我的问题。
所以可以说以下让我得到 3 个不同的数组
$events = $this->getDoctrine()->getRepository('TestBundle:Events')->findBy(array('event' => $eventId));
Run Code Online (Sandbox Code Playgroud)
#name,color#
1. 派对,粉色
2. 泳池派对,蓝色
3. 生日,红色
并 foreach $events避免非对象调用。
foreach($events as $e)
{
$name = $e->getName();
$color = $e->getColor();
}
Run Code Online (Sandbox Code Playgroud)
现在我可以将数组返回到 twig 并 for 循环它们,但是我可以将它们存储到控制器中的数组中吗?
我当前的代码
$events =
$this->getDoctrine()->getRepository('TestBundle:Events')->findBy(array('event' => $eventId));
foreach($events as $e)
{
$name = $e->getName();
$color = $e->getColor();
$array = array(array("$name", "$color"));
}
return new JsonResponse($array);
Run Code Online (Sandbox Code Playgroud)
这样我只得到最后一个数组。在本例中,生日为红色。希望有人能帮我解答我的问题。感谢您抽出时间!
我正在尝试提取伊利诺伊州纳洛酮配送中心的位置和名称,以用于阿片类药物危机的研究项目。
公共卫生部可从这里访问此表格生成的仪表板https://idph.illinois.gov/OpioidDataDashboard/
我已经尝试了我能找到的一切。首先更改 URL 以使用 Tableau 的界面“下载”数据。那只能让我下载 pdf 地图,而不是其背后的实际数据集。其次,我修改了我在 Stack Overflow 上见过几次的 python 脚本来尝试请求数据。但是,我认为它遇到了某种错误。代码如下。
url = "https://interactive.data.illinois.gov/t/DPH/views/opioidTDWEB_prod/NaloxoneDistributionLocations"
r = requests.get(
url,
params= {
":embed":"y",
":showAppBanner":"false",
":showShareOptions":"true",
":display_count":"no",
"showVizHome": "no"
}
)
soup = BeautifulSoup(r.text, "html.parser")
print(soup)
tableauData = json.loads(soup.find("textarea",{"id": "tsConfigContainer"}).text)
dataUrl = f'https://tableau.ons.org.br{tableauData["vizql_root"]}/bootstrapSession/sessions/{tableauData["sessionid"]}'
r = requests.post(dataUrl, data= {
"sheet_id": tableauData["sheetId"],
})
dataReg = re.search('\d+;({.*})\d+;({.*})', r.text, re.MULTILINE)
info = json.loads(dataReg.group(1))
data = json.loads(dataReg.group(2))
print(data["secondaryInfo"]["presModelMap"]["dataDictionary"]["presModelHolder"]["genDataDictionaryPresModel"]["dataSegments"]["0"]["dataColumns"])
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助。
我有一个返回JSON的网址,但返回字符串的开头是
])}while(1);</x>{"success":true,"payload":{"value":
我想拆分])}while(1);</x>并查看该split数组的[1]值。
现在我在做
fetch(jsonURL)
.then(res => {
console.log(res);
});
Run Code Online (Sandbox Code Playgroud)
通常情况下,我会在处分裂,console.log但遇到以下错误:
天才程序员的神话9381a884591e:1未捕获(承诺)SyntaxError:JSON中位置0处的意外令牌]
json ×7
javascript ×6
python ×2
rest ×2
security ×2
web-scraping ×2
api ×1
browser ×1
cross-domain ×1
dataframe ×1
facebook ×1
get ×1
http ×1
pandas ×1
php ×1
symfony ×1
tableau-api ×1