2009-08-01 5 views
2

нормально, я начинаю с очень простым способом:Javascript проблема безопасности

alert(someText); 

«SOMETEXT» является переменной, которой пользователи будут передавать значение в по форме. Есть ли шанс, что пользователь передаст следующий текст и добавит код в мой Javascript? Например, может ли он передать это в этом методе:

«anotherText»); Alert («nextText»

Если да, то как я могу предотвратить это? если нет, то может кто-нибудь упомянуть некоторую озабоченность по поводу безопасности JavaScript?

ответ

7

Нет, это не работает. Строка значения не подставляются, где они используются, они просто используются как строки Таким образом, нет никаких проблем безопасности

единственный раз, когда вы, возможно, придется беспокоиться об этом, когда вы используете eval:..

eval("alert(\" + someText + "\");"); 

(Да, я понимаю, что это надуманный пример ...)

4

В принципе, до тех пор, пока вы не вызываете «eval» (или какую-то функцию), и вы не используете Javascript, созданный пользователями прямо на страницы (через тег скрипта), вам не о чем беспокоиться.

2

Как только у вас есть переменная внутри javascript, это не имеет большого значения, если вы не сделаете eval или не установите для него свойство innerHTML элемента DOM.

Кроме того, есть ли потенциал для инъекций, зависит от того, как вы получаете значение из формы в javascript.

Если, например, форма отправляется на сервер, и значение переменной устанавливается путем записи javascript на стороне сервера, у вас может возникнуть проблема. Что-то вроде этого явно оставило бы скрипт открытым для инъекций.

var someText = "<?php echo $_POST["someText"]; ?>"; 

Так что сложно сказать, можете ли вы иметь проблему с безопасностью, не зная, как вы получаете значение из формы. По моему опыту, серверный код является причиной большинства векторов XSS. С точки зрения javascript вам просто нужно следить за eval и innerHTML.

0

если "SOMETEXT" визуализируются сервером, например, JSP, скорость, то это опасно

например

<script> 
    alert({{someText}}) 
</script> 

тогда перед выполнением JavaScript, в то время как HTML разбора, это опасно

но если «sometext» является переменной javascript, ответ @ Zifre прав;

кроме, кроме ключевого слова "eval", новая функция (sometext), location.href = sometext ...... может вызывать некоторые атаки

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