2013-12-08 3 views
0

Использование регистра:Можно ли переопределить window.document.location.host?

  • Мой сервер находится в домене www.mywebsite.com
  • В веб-страницы, у меня есть тег вызов JavaScript к WebService, который находится в том же домене
  • JavaScript вызов подписания и действует только в течение ограниченного времени
  • WebService использовать сессионные куки, установленный в том же домене, чтобы вернуть имя пользователя в браузере
  • Риск в том, что вредоносный сайт может царапать мою страницу, чтобы получить правильный вызов WebService и включить его на своей странице для отображения имени пользователя на его страницах для фишинга цели

Что я

Пусть говорят, что я хочу, чтобы предотвратить хотлинкинг этого JavaScript: <script type="text/javascript" src="http://webservice.mywebsite.com/username.js?ID=SERVICE_ID;ts=1386607643;sig=52f72b1a0fe9158d87d9e4ba4e26a731"/>

в username.js, я эта проверка:

if (document.location.host.match(/[.]mywebsite[.]com$/i) == null) { document.location.href="http://www.mywebsite.com/error.html"; } else { username = username_obtained_using_the_session_cookie }

Мой вопрос
ли это безопасно?

+0

Можете ли вы уточнить в коде или псевдокоде, что именно вы делаете? Я не уверен, что сейчас понимаю. – janfoeh

+0

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

ответ

1

Да можно переопределить window объект:

var window = '123'; 

alert(window.location); 

дает в оповещении undefined.

Или даже переопределить document объект (ваш редактировать на свой вопрос):

var document = { "location" : { "host" : "www.mywebsite.com" } };

так что теперь проходит тест:

if (document.location.host.match(/[.]mywebsite[.]com$/i) == null) { document.location.href="http://www.mywebsite.com/error.html"; } else { username = username_obtained_using_the_session_cookie } 

Лучшим решением было бы, если вы сделали ваш веб-сервис отвечает на POST, а не GET для вашего метода, то из-за Same Origin Policy не удастся любому удаленному домену прочитать содержимое вашего ответа, содержащего имя пользователя.

Вы можете либо выполнить POST в plain JavaScript, либо вы можете использовать JQuery.

+0

Спасибо. Переопределение работает в IE, но не в FF и Chrome. Есть ли какое-либо решение для предотвращения переопределения? – Dinh

+0

Я успешно тестировал Chrome. Роллинг ваших собственных чеков не является ответом - это то, что SOP уже разработал. – SilverlightFox

+0

Одна вещь, о которой я вам не говорил, это то, что я хочу также отобразить имя пользователя на сайте-партнере www.my-other-website.com, используя файл cookie сеанса, расположенный в домене www.mywebsite.com. Вот почему использование POST бесполезно в моем случае – Dinh

Смежные вопросы