Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   безопасность, не выполнять javascript (https://javascript.ru/forum/misc/26929-bezopasnost-ne-vypolnyat-javascript.html)

tadjik1 28.03.2012 11:32

безопасность, не выполнять javascript
 
Добрый день.

Возник такой вопрос — как вывести javascript код, не выполняя его.
Простейшее приложение tasklist, пользователь может вводить любые данные в качестве текста таска. Надо затем отдавать это также текстом.

И вопрос сразу в догонку — какие еще могут возникнуть проблемы безопасности.

пример приложения — http://radiowav.es:3000

9xakep 28.03.2012 11:36

Ну попробуйте, что-то вроде этого:
<input type='button' value='push' onclick='a()'>
<script>
var b = false;
function a() {
if(b) {
alert('1') //тут ваш код
}
}
</script>

В общем изменяете все что хотите, но пока b = false, код не заработает
=======
Насчет приложения, уберите эти алерты, мол создано, исправлено..

tadjik1 28.03.2012 11:45

ну основной вопрос — как вывести javascript-код текстом, по аналогии с mysql-инъекциями.

<!doctype html>
<html>
<head>
<script>
function test(){
var string = 'alert("hack it")';
document.getElementById('example').innerHTML = string;
}
</script>
</head>
<body onLoad="test()">
<h3 id="example"></h3>
</body>
</html>

tadjik1 28.03.2012 11:49

ой, а так работает))
дело в том, что это строка?

9xakep 28.03.2012 11:53

tadjik1,
да

9xakep 28.03.2012 11:55

<div id='div'></div>
<script>
var a,b,c,d;
function a() {  }
a = {}
b = []
document.getElementById('div').innerHTML = document.getElementsByTagName('script')[0].innerHTML
</script>

tadjik1 28.03.2012 11:56

хорошо. тогда полная история =)

у меня есть файл tasks.json, в котором массивом сохранены объекты (таски).

{"id":"7","text":"ыав","lastupdate":"28.03.2012","complete":false}


вот если "text":"alert('1')", то он запускается, несмотря на то, что я добавил проверку и на клиенте, и на сервере (node.js)

server.js
newTask.text = String(post.text);


index.html

$('#taskList').append('<li id="' + String(value.id) + '">' + String(value.text) + '</li>');

9xakep 28.03.2012 12:01

Может тупость сморожу, попробуй взять в двойные кавычки: ""alert('1')""

tadjik1 28.03.2012 12:04

всё равно сработало =((

сработала вот такая строчка — "<script>alert('11')</script>"

просто алерт не работает

tadjik1 28.03.2012 12:17

кстати, на форуме где-то видел, заменяли специальные знаки <, > и /.


Часовой пояс GMT +3, время: 05:40.