Запрещение пользователю вводить javascript вместо URL для использования в href - PullRequest
0 голосов
/ 29 ноября 2010

Мне нужно, чтобы пользователь не вставлял javascript в поле ссылки. Я знаю, что мог бы просто проверить наличие «javascript:» в начале URL-адреса, который они вводят, но мне было интересно, можно ли каким-то образом создать тег <a>, чтобы заставить его обрабатывать href как адрес? Я чувствую, что это было бы лучшим решением, так как люди всегда находят способы обойти базовые проверки.

Ответы [ 5 ]

3 голосов
/ 29 ноября 2010

Забавное решение (и очень эффективное, если вы спросите меня), это поставить http:// перед URL-адресами, которые еще не начинаются с него.Это набросок того, что я имею в виду:

if(url.slice(0,"http://".length) !== "http://" && url.slice(0,"https://".length) !== "https://") {
    url = "http://" + url;
}
1 голос
/ 29 ноября 2010

Во-первых, вы должны признать, что браузер можно манипулировать, отправляя все, что хочет пользователь, поэтому проверка на стороне клиента не является ни необходимой, ни достаточной, а просто удобной (для пользователя).

Учитывая это, легкоприходит на ум процесс:

  • Обеспечить абсолютную привязанность каждого URL-адреса, указав в начале URL-адреса спецификацию протокола.
  • Обеспечить использование протокола {http, https}..

Попробуйте это:

function validateUrl(value) {
  return value.match(/^(http|https):\/\//) != null;
}

if(validateUrl(inputField.value)) {
  // value is acceptable
} else {
  // value is not an acceptable URL
}
1 голос
/ 29 ноября 2010

Вы всегда можете добавить протокол http: // или https: //. Может потребоваться замена для удаления любых существующих http или https.

Даже если у вас есть

http://javascript:alert('test');

JavaScript не будет работать.

1 голос
/ 29 ноября 2010

Лучше белый список, чем черный список и проверка протокола http (s), я думаю.

0 голосов
/ 29 ноября 2010

Нет чистого HTML-способа заставить тег обрабатывать href как URL.

Единственное (что я знаю), что вы можете сделать, это проверить наличие JavaScript в атрибуте href.

...