нашел вот. называется это xss, примитивная защита такая —
string.replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """); гуру, подскажите, какие еще могут быть проблемы и как от них защититься? не говорю о целенаправленных атаках, а просто вот от таких «болванов». |
|
нет, зачем?
$.getJSON('tasks.json', function(data) {
$(data.tasks).each(function(index,value){
if(!value.complete){
$('#taskList').append('<li id="' + value.id + '">' + value.text + ' <input type="button" class="edit" value="edit"><input type="button" class="complete" value="mark complete"></li>');
}
});
});
вставляет в html тэги <script></script>, браузер их исполняет |
Стоп...так вы пробовали в таксе написать: { id: "5", text:""alert('1')""... }
|
9xakep, всё верно, так не работает. а вот так { id: "5", text:""<script>alert('1')</script>""... } запускается. в общем, решение — это заменить их на ascii коды. только теперь новая проблема — не пойму как их отображать правильно для клиента =)
|
вы, наверное, имели ввиду этот. он в данном контекте не подходит.
через регулярки хорошо получается, но не пойму как их обратно клиенту хтмл кодом отдавать, а не текстом, чтобы красиво было. сам механизм не могу никак понять( |
str.replace(new RegExp("<", "mig"), "<");
|
Ну попробуйте при отправке проверять если в строке: <script> или </script>
<script>
var a = ''<script>asd</script>''
if((/\<script\>/).test(a)) {
a = a.replace(/\<script\>/, '')
a = a.replace(/\<\/script\>/, '')
alert(a)
} else { alert('noscript') }
</script>
=========== Мда...опять тупость сморозил... |
Цитата:
|
Тогда code еще в добавок
Хотя там не грамотно сказано, код и без этих тегов читаться не будет:
function a() {
alert('')
}
<code><script>alert('a')</script></code>
============= А скрипт и без этих тегов выполняется.. ===========
<plaintext>
<script>
alert('a')
</script>
А вот это уже что-то рабочее(в хроме), в других браузерах не проверял.. |
| Часовой пояс GMT +3, время: 15:43. |