Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.11.2013, 20:35
Интересующийся
Отправить личное сообщение для Den Brown Посмотреть профиль Найти все сообщения от Den Brown
 
Регистрация: 22.10.2013
Сообщений: 19

"Засады" пользовательского ввода
Приветствую всех! и спасибо, что заглянули в эту тему.

Пишу JS в котором prompt спрашивает пользователя "как много вы ходите создать следующих записей"

после чего полученная переменная проверяется на число, округляется, проверятся на соотвествие диапазону (см. код проверки ниже) и передается в следущий цикл в качестве счетчика i<этоЧисло.

В цикле через AJAX API идет создание новых записей на сервере.

Но меня терзают параноидальные сомнения: а может ли пользователь ввести, например фрагмент JS кода, который потом исполнится? Исполнится ли он после моей проверки? Что еще может подкинуть злодей? спасибо

Вот код проверки (спасибо Учебнику и его Автору):

/*
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}

var quantity = prompt('How many records do you want to create? (Choose from 1 to 10)', '');

if (!isNumeric(quantity)) { // check is it a number?

quantity=null;

alert("Please enter a number from 1 to 10");

} else {

quantity=Math.floor(+quantity); //to number and round to floor


if (quantity<=0||quantity>10) { //check is it less than 1 or more than 10

quantity=null;

alert("Please enter a number from 1 to 10");

}
}

if(quantity!=null){

for (var i=0; i<quantity; i++) {

ТЕЛО ЦИКЛА

}
}
*/
Ответить с цитированием
  #2 (permalink)  
Старый 25.11.2013, 20:49
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Den Brown, проверку нужно проводить на сервере, а не на клиенте.
Сообщение от Den Brown
Но меня терзают параноидальные сомнения: а может ли пользователь ввести, например фрагмент JS кода, который потом исполнится?
Да, может
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 25.11.2013, 21:18
Интересующийся
Отправить личное сообщение для Den Brown Посмотреть профиль Найти все сообщения от Den Brown
 
Регистрация: 22.10.2013
Сообщений: 19

Сообщение от cyber Посмотреть сообщение
Den Brown, проверку нужно проводить на сервере, а не на клиенте.
Полностью согласен. И опишу ситуацию подробнее:

Стандартная страница какой-то записи на какой-то платформе работающей на JAVA.

Для того, чтобы не приходилось возиться с созданием кастомных страниц и их контроллеров, на эту стандартную страницу можно добавить кнопку, под которой лежит JS код который делает AJAX SOAP вызовы на сервер для выполнения каких то нехитрых операций с записями, как-то добавить новую дочернуюю запись, перенумеровать дочерние записи. При этом не предполагается, что потребуется пользовательский ввод. Но в моем случае он потребовался.

есть еще вариант: после ввода не далется AJAX SOAP колы, а делается стандартный GET вызов на кастомную страницу где в URL загружается ввод как параметр, и контроллер той страницы берет парметр и делает, то что нужно. Но проблема в вредительском вводом в JS так и отстается , кроме этого прибавляется необходимость проверять на контроллере.

так что хочу понять, что можно сделать плохого в принципе в таком случае, и как это предотвратить

а вот и идея: а может не использовать промпт, а поднимать в центре див с селектом и фиксированными вариантами....

Сообщение от cyber Посмотреть сообщение
Да, может

OK,
что он именно может ввести?

как этот ввод может пройти проверку в функции isNumeric(n) и оставаться опасным?

или код можно "положить" даже не доходя по цикла, где ввод ипользуется в качестве счетчика?

спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 25.11.2013, 22:27
Интересующийся
Отправить личное сообщение для Den Brown Посмотреть профиль Найти все сообщения от Den Brown
 
Регистрация: 22.10.2013
Сообщений: 19

Решил полностью отказаться от использования JS в данном случае. Вся бизнес логика будет выполняться кастомными страницами и их контроллерами, а пользовательский ввод будет осуществляться выбором значения в селекте. Никаких промтов (всплытие которых может быть оключено), никакого произвольного ввода (потенциально опасного), никакого JS (который тоже может отключен).
Ответить с цитированием
  #5 (permalink)  
Старый 26.11.2013, 11:07
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Den Brown
как этот ввод может пройти проверку в функции isNumeric(n) и оставаться опасным?
если речь идет от проверки на клиенте , то можно элементарно обойти проверку отправив запрос вручную через консоль
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ввести в поле ввода значение где есть javascript MOZG Общие вопросы Javascript 8 19.04.2013 10:28
Сохранение пользовательского ввода Shockk Общие вопросы Javascript 1 28.09.2012 09:23
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Зависимость полей ввода sakutylev AJAX и COMET 6 07.01.2011 17:10
Переход между окнами ввода при заполнении. Бушка Общие вопросы Javascript 4 25.03.2009 15:40