2016-10-15 6 views
0

Хорошо, поэтому я пытался исправить xss на своем веб-сайте, все время не удалось. Существует строка называется «имя» в ведьме люди меняют свое название на что-то вроде <script>alert("HahS");</script> я уже пробовалXSS в socket.io/node.js чат?

name = name.replace(/(<|>)/g, ''); 

if(name.indexOf('<') !== -1){ 
return false; 
} 

Все, что мне удалось сделать, это исправить XSS на пользователе, который отправил XSS, но и для всех другие люди вошли в него, все еще всплывают.

ответ

1

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

const sanitized = encodeURIComponent(name); 

Фокус в том, что вам нужно сделать это в нужном месте. Если ваш параметр name передается другим клиентам, вам необходимо решить, где вы хотите его избежать. Как правило, лучше всего сделать это прямо перед данными , сделанным, или использоваться таким образом, чтобы это было опасно, если не удалось избежать.

Это предполагает:

  1. Делать это на клиенте, а не на сервере.
  2. Выполнение этого, когда клиент инициализирует/визуализирует, а не когда потенциально злонамеренный пользователь отправляет свое имя.

Если у вас возникли трудное время выяснить, где правильное место, просто добавьте encodeURIComponent() везде вы используете name и работать в обратном направлении (выяснить, где вы можете удалить его). Вероятно, в итоге вы окажетесь с name. Но это нормально для большинства невинных значений name, и это лучше по умолчанию, чем открытие для атак XSS.

Подробнее:

+0

Я с трудом добавляя encodeURIComponent() везде я использую имя, например, есть "bet.name", и если я меняю его на «bet.encodeURIComponent (name)», сайт вообще не работает. – Petras

+0

Если значение хранится в 'bet.name', вам нужно использовать' encodeURIComponent (bet.name) '. Это работает? –

+0

Я думаю, это работает, но очень плохо, даже появляются пробелы «% 20». Есть ли способ сделать его лучше выглядящим (удалить только <,> и т. Д.)? – Petras