2017-04-17 97 views
6

我在almaconnect.com上,在主页上有一个文本框,当您键入(通过发出ajax调用来加载内容)时,它会自动建议大学的一些结果。我没有犯同样的Ajax调用,但请求的卷曲请求,导致对终端如何保护ajax内容

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' -H 'Host: www.almaconnect.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://www.almaconnect.com/' -H 'Cookie: Almaconnect=; _ga=GA1.2.315358219.1489989532; __utma=117457241.315358219.1489989532.1490871434.1492414070.3; __utmz=117457241.1490871434.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _gat=1; __utmb=117457241.1.10.1492414070; __utmc=117457241; __utmt=1' 

一些加密线正是我想要相同的功能,我的网站,这样,如果任何用户尝试获取我的网站数据,他不会能够。

回答

9

无论二进制数据,你在终端看到当你卷曲通话未加密的内容。它只是压缩的内容。您可以通过运行

curl $params > output 

验证它可以检查该文件通过运行

file output 

匹配任何已知的文件格式,你会看到结果类似于

output: gzip compressed data, from Unix 

东西运行gzip -d -c output将解压并将纯文本内容打印到终端屏幕。

原因

之所以出现这种情况是因为,你有卷曲的呼叫发送accept-encoding头。与浏览器不同,curl不会自动解压缩结果。这就是造成这种混乱的原因。

-H 'Accept-Encoding: gzip, deflate, br' 

删除来自卷边调用这个特殊的标头将让你直接在未压缩的明文格式的响应。你可以尝试下面的命令。

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' -H 'Host: www.almaconnect.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://www.almaconnect.com/' -H 'Cookie: Almaconnect=; _ga=GA1.2.315358219.1489989532; __utma=117457241.315358219.1489989532.1490871434.1492414070.3; __utmz=117457241.1490871434.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _gat=1; __utmb=117457241.1.10.1492414070; __utmc=117457241; __utmt=1' 

摘要

almaconnect.com并没有真正采取任何额外的步骤来混淆他们的AJAX响应。这样做通常是一个糟糕的主意。无论您采用什么方法来混淆您的回复(例如使用HTTP Referrer字段),人们总是会想出反击措施来打败他们。

这简直是不值得投入精力和时间来拿出一个机制,这将最终被确定攻击者被打破的时间。

+0

谢谢@gtux,“接受编码”在这里让我感到困惑,奇妙地解释道。 –

0

服务器正在返回一个加密的响应,在客户端使用javascript解密接收到的响应后。您可以通过以某种加密方式发送您的服务器响应,然后在客户端解密来做同样的事情。同样的例子可以是加密js。 看一看:Encrypt with PHP, Decrypt with Javascript (cryptojs)

+0

但他们正在做的事情不同的原因。 –

0

也许他们正在检查ajax请求的HTTP_REFERER值。如果HTTP_REFERER不是网站,那么它可以返回一个加密的响应。

也可以使用基于时间的令牌来保护ajax调用。例如,当请求网页时,可以在服务器上生成随机字符串并将其存储在数据库中。这个字符串被发送到客户端,它在ajax请求中使用它。然后服务器可以检查令牌是否已过期。此方法允许ajax调用在一段时间内有效。

+0

我在我的卷曲请求中设置Referer,所以不能成为案例。 –

1

这是不可能的。

answer from gtux很好地解释了您看到压缩内容的二进制字符而不是加密内容的原因。

注意,这很简单版本的作品:

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' 

答案from gaganshera可以告诉你一个方法来混淆的内容,但是,这并不意味着要真正保护内容,只是为了让人们有点困难看到它,因为解密代码是在公共页面。

您的网站可以通过安全(登录+设置cookie)保护或公开。如果被保护,安全代码会检查cookie标头。如果公开,只有混淆内容的方法,而不是保护内容。如果您在Firebug响应看到未加密

https://stackoverflow.com/a/14570971/1536382

https://www.quora.com/How-can-we-hide-JSON-data-from-tools-like-Chrome-development-tools-and-Firebug-etc-as-a-security-beyond-https