Как LinkedIn узнает или отслеживает, где я встроил свой виджет? - PullRequest
0 голосов
/ 23 декабря 2011

Когда вы пытаетесь интегрироваться с кнопкой Apply Now в LinkedIn, вы сначала регистрируетесь для получения ключа API. Форма просит вас ввести API домена Javascript, который является Fully-qualified domain name of all pages that will call the JavaScript API with this key.. В свою очередь, он создает ключ API и некоторый HTML-код, который вы можете скопировать и вставить на свою веб-страницу и начать работу.

Это код, созданный их волшебником:

<script src="http://platform.linkedin.com/in.js" type="text/javascript">

  api_key: 7a4ghb12agvda4552da

</script>

<script type="IN/Apply" 

data-companyname="Asd"
data-jobtitle="Software Developer"
data-joblocation="Istanbul"
data-email="abc@xyz.com">

</script>

Теперь, как можно отследить, куда встроен этот скрипт? Сначала я ввел http://example.com как мой API домена Javascript. Оказалось, что я могу использовать этот виджет только на домене example.com.

Что внутри in.js, которое сообщает LinkedIn, где оно встроено?

Причина, по которой я спрашиваю, заключается в том, что я также сам создаю виджет и хочу убедиться, что только виджет зарегистрированного домена может использовать мой виджет.

Редактировать: В качестве бонуса, что если я скачаю in.js, удалите часть, где он проверяет домен, и включите мою собственную версию in.js на мою страницу? Как они это предотвращают?

Сотрудник LinkedIn упоминает, что выполнены проверки как на стороне клиента, так и на стороне сервера. Но что это будет за проверка? Я ищу глубокое понимание проблемы. Как я могу создать такой виджет? На стороне клиента, как вы проверяете текущую страницу с вашим файлом .js? И как вы узнаете, в каком домене находится файл js? Любая помощь приветствуется. Спасибо.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Платформа LinkedIn Javascript не будет работать, если вы сделаете локальную копию in.js - внутренний сервер (который вызывает.) Проверяет, чтобы убедиться, что in.js также поступает с правильного сервера как проверка, чтобы убедиться, что фреймворк будет работать только на указанных доменах.

Этот вопрос был задан / ответил здесь: https://developer.linkedin.com/forum/security-prevent-impersonations

2 голосов
/ 23 декабря 2011

in.js имеет скрипт, который добавляет другой тег скрипта в DOM.Он передает ключ API (возможно, в качестве параметра GET в URL-адресе скрипта), затем сервер проверяет реферер HTTP (который является отправкой браузерами стандартного заголовка HTTP с указанием веб-сайта, который отправил их для получения этой страницы) и проверяет, соответствует ли онКлюч API в базе данных.

Более простая версия будет содержать что-то вроде этого:

document.write('<script src="http://mysite.com/api.js?key="' + api_key + '></' + 'script>');

Затем на сервере что-то вроде этого псевдокода:

var expectedDomain = queryTable('apikeys').equal('key', GET('key')).field('domain').run();
if (expectedDomain === parseDomain(http.referer)) {
    respond(myscript);
}
...