Как Google шифрует / запутывает ответ http, чтобы сделать его почти нечитаемым невооруженным глазом? - PullRequest
2 голосов
/ 12 июня 2011

Для любого конкретного поиска Google Instant AJAX вернуть это:

{
    e: "tGj0TZ-XLaXh0QGyw7nuDA",
    c: 1, 
    u: "http://www.google.com/s?hl\x3des\x26xhr\x3dt\x26q\x3dque\x26cp\x3d3\x26pf\x3dp\x26sclient\x3dpsy\x26source\x3dhp\x26aq\x3d\x26aqi\x3d\x26aql\x3d\x26oq\x3d\x26pbx\x3d1\x26bav\x3don.2,or.r_gc.r_pw.\x26fp\x3daee70eb115de80e6\x26biw\x3d1440\x26bih\x3d653\x26tch\x3d1\x26ech\x3d4\x26psi\x3dWWb0TYasBu_q0QGW5IjmAg.1307862617656.1",
    d: "[\x22que\x22,[[\x22que\x22,0,\x220\x22],[\x22que\\u003Cb\\u003E es el amor\\u003C\\/b\\u003E\x22,0,\x221\x22],[\x22que\\u003Cb\\u003Epasa\\u003C\\/b\\u003E\x22,0,\x222\x22],[\x22que\\u003Cb\\u003E me dices\\u003C\\/b\\u003E\x22,0,\x223\x22],[\x22que\\u003Cb\\u003E significa mi nombre\\u003C\\/b\\u003E\x22,0,\x224\x22]],{}]"
} 
{
    e: "tGj0TZ-XLaXh0QGyw7nuDA",
    c: 0,
    u: "http://www.google.com/s?hl\x3des\x26xhr\x3dt\x26q\x3dque\x26cp\x3d3\x26pf\x3dp\x26sclient\x3dpsy\x26source\x3dhpx26aq\x3d\x26aqi\x3d\x26aql\x3d\x26oq\x3d\x26pbx\x3d1\x26bav\x3don.2,or.r_gc.r_pw.\x26fp\x3daee70eb115de80e6\x26biw\x3d1440\x26bih\x3d653\x26tch\x3d1\x26ech\x3d4\x26psi\x3dWWb0TYasBu_q0QGW5IjmAg.1307862617656.1",
    d: "" 
}

И с этим ответом страница обновляет результаты. какой метод Google использует для достижения этого уровня шифрования / запутывания (я не уверен, какой термин использовать в этом случае)

1 Ответ

3 голосов
/ 12 июня 2011

В этом нет ничего запутанного. Он просто закодирован, поэтому его можно переносить в строке JavaScript, не нарушая ее.

В строках JavaScript вы можете использовать escape-последовательности для представления символов: \xFF для кодирования символа ISO-8859-1 и \uFFFF для кодирования символа Unicode . Например, \x3d - это знак равенства =, \u003C - это символ меньше чем < (внутренне все строки JavaScript имеют Unicode).

У вас есть два литерала объектов, которые можно использовать для создания реальных объектов. Попробуйте на консоли JavaScript.

var test = {
    e: "tGj0TZ-XLaXh0QGyw7nuDA",
    c: 1, 
    u: "http://www.google.com/s?hl\x3des\x26xhr\x3dt\x26q\x3dque\x26cp\x3d3\x26pf\x3dp\x26sclient\x3dpsy\x26source\x3dhp\x26aq\x3d\x26aqi\x3d\x26aql\x3d\x26oq\x3d\x26pbx\x3d1\x26bav\x3don.2,or.r_gc.r_pw.\x26fp\x3daee70eb115de80e6\x26biw\x3d1440\x26bih\x3d653\x26tch\x3d1\x26ech\x3d4\x26psi\x3dWWb0TYasBu_q0QGW5IjmAg.1307862617656.1",
    d: "[\x22que\x22,[[\x22que\x22,0,\x220\x22],[\x22que\\u003Cb\\u003E es el amor\\u003C\\/b\\u003E\x22,0,\x221\x22],[\x22que\\u003Cb\\u003Epasa\\u003C\\/b\\u003E\x22,0,\x222\x22],[\x22que\\u003Cb\\u003E me dices\\u003C\\/b\\u003E\x22,0,\x223\x22],[\x22que\\u003Cb\\u003E significa mi nombre\\u003C\\/b\\u003E\x22,0,\x224\x22]],{}]"
};

console.dir(test);

выходов (в Google Chrome)

Object
    c: 1
    d: "["que",[["que",0,"0"],["que\u003Cb\u003E es el amor\u003C\/b\u003E",0,"1"],["que\u003Cb\u003Epasa\u003C\/b\u003E",0,"2"],["que\u003Cb\u003E me dices\u003C\/b\u003E",0,"3"],["que\u003Cb\u003E significa mi nombre\u003C\/b\u003E",0,"4"]],{}]"
    e: "tGj0TZ-XLaXh0QGyw7nuDA"
    u: "http://www.google.com/s?hl=es&xhr=t&q=que&cp=3&pf=p&sclient=psy&source=hp&aq=&aqi=&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=aee70eb115de80e6&biw=1440&bih=653&tch=1&ech=4&psi=WWb0TYasBu_q0QGW5IjmAg.1307862617656.1"
    __proto__: Object

Вы можете продолжить:

console.dir( eval(test.d) );
...