2015-05-26 3 views
1

Так "<h1>Hello World</h1>" просто вернет «Hello World».Как захватить только текст элементов HTML безопасным и безопасным способом

Я пробовал:

$('<div>').html('<h1>Hello World</h1>').text() 

И это отлично работает в большинстве случаев, но это действительно открывает собой XSS уязвимость, когда строка что-то вроде этого: <img src=1 onerror=alert(/XSS/)>, когда я ожидаю, что это возвращать пустая строка

+0

«но он не открывается в XSS уязвимости» вы имеете в виду «* это * открыть»? – Anonymous

+1

ну, это зависит от того, откуда эта строка исходит ... –

+0

Да, я имею в виду, что это «делает» открывает уязвимость xss –

ответ

2

Вы можете попробовать этот код найден здесь- Fastest method to escape HTML tags as HTML entities?

function sanitize(str) { 
    return str.replace(/&/g,'').replace(/</g,'').replace(/>/g,''); 
} 

В вашем примере, если предположить, что есть HTML, который выглядит следующим образом:

<div><img src=1 onerror=alert(/XSS/)></div> 

просто дезинфицировать его так:

var string = $('div').text(); 
var sanitized = sanitize(string); // "img src=1 onerror=alert(/XSS/);" 
+0

Спасибо за ваш ответ. В случае:

, я ожидаю, что он вернет пустую строку, потому что нет никакого текста. –

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