2012-07-02 1 views
5

В настоящее время я использую этот метод с решением jQuery, чтобы очистить строку от возможных атак XSS.Санитарная обработка Javascript: самый безопасный способ вставки возможной строки XSS html

sanitize:function(str) { 
    // return htmlentities(str,'ENT_QUOTES'); 
    return $('<div></div>').text(str).html().replace(/"/gi,'&quot;').replace(/'/gi,'&apos;'); 
} 

Но у меня такое чувство, что оно недостаточно безопасно. Я что-то пропустил?

Я попытался htmlentities из phpjs проекта здесь: http://phpjs.org/functions/htmlentities:425/

Но это своего рода прослушивают и возвращает некоторые дополнительные специальные символы. Может, это старая версия?

Например:

htmlentities('test"','ENT_QUOTES'); 

Производит:

test&amp;quot; 

Но должно быть:

test&quot; 

Как вы ее обработки с помощью JavaScript?

+0

Как вы собираетесь использовать «осмысленные» строку? – penartur

+0

Вставить в html документ ofc как текст. Как href = "sanitized" или src = "sanitized", или

sanitized
Somebody

+0

Откуда происходит вставка? Вы хотите динамически вставлять строку в уже открытую страницу с помощью Javascript или в созданный на сервере HTML-документ с помощью PHP? – penartur

ответ

3

Если ваша строка должна быть простым текстом без форматирования HTML, просто используйте .createTextNode(text)/присвоение .data свойства существующего текстового узла. Все, что вы там ставите, всегда будет интерпретироваться как текст и не нуждается в дополнительном ускорении.

+0

Как насчет «или» и других символов, о которых я, возможно, не знаю? – Somebody

+0

Я написал «что угодно», и это «что бы ни было». Вы бы манипулировали полем в структуре DOM, которое может содержать только текст. Эти операции никогда не вызовут каких-либо автоматических вызовов парсера HTML, таких как известный «innerHTML» (это, BTW, по-прежнему считается одним из худшие недостатки дизайна этой функции). –

1

Вы должны цитировать другие символы тоже:. ' " < > ( ) ; все они могут быть использованы для XSS attacsk

3

Да динамически с помощью JavaScript Строка приходит из ненадежных. источник

Тогда вам не нужно санировать его вручную. С помощью jQuery вы можете просто написать

​var str = '<div>abc"def"ghi</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​'; 

​$​('test').text(str); 
$('test').attr('alt', str); 

Браузер будет отделять данные от кода для вас.

Пример: http://jsfiddle.net/HNQvd/

+0

Хотя 'alt' безопасен, у вас все еще будут проблемы с атрибутами, которые могут быть интерпретированы как нетекстовые строки. Наиболее очевидно 'onclick' и другие обработчики, но также' src'. –

+0

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

+0

Люди. У меня есть рабочее решение на моем посту. Я просто хочу, чтобы вы, люди, обновили его, если у него есть некоторые уязвимости, если они используются внутри

HERE
или , или . Это все. :) – Somebody

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