2015-03-09 2 views
-1

У меня есть дезинфицирующее средство для javascript, где я заменяю '<', '>' и '&' с их соответствующими кодировками символов.Bypass javascript sanitizer

str.replace(/[&<>]/g, encoding);

Это продезинфицировать данные вставляются в БД, а затем отображается как HTML.

Мол, <?php echo $col1 . "\n" $col2 . "\n"; ?>

Можно ли разорвать этот дезинфицирующее?

+0

Для чего он предназначен? – zerkms

+0

@zerkms Изменили вопрос. –

+0

Непонятно: вы получаете уже сбежавший HTML-код, который вы хотите сохранить, не сбегая? Почему вы избегаете его, прежде чем вы его сохраните? – tadman

ответ

0

Ваш код будет работать, но он заменит <,> и & одной строкой, а не их соответствующими закодированными строками. Он также может быть неэффективным, поскольку существует собственный метод, основанный на браузере, createTextNode.

function escapeHtml(str) { 
    var div = document.createElement('div'); 
    div.appendChild(document.createTextNode(str)); 
    return div.innerHTML; 
}; 

http://shebang.brandonmintern.com/foolproof-html-escaping-in-javascript/

Однако это до сих пор не может быть безопасным, так как клиент может изменить JavaScript, чтобы предотвратить эту кодировку. Было бы гораздо безопаснее сделать это в бэкэнде.