"Засады" пользовательского ввода
Приветствую всех! и спасибо, что заглянули в эту тему.
Пишу 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++) { ТЕЛО ЦИКЛА } } */ |
Den Brown, проверку нужно проводить на сервере, а не на клиенте.
Цитата:
|
Цитата:
Стандартная страница какой-то записи на какой-то платформе работающей на JAVA. Для того, чтобы не приходилось возиться с созданием кастомных страниц и их контроллеров, на эту стандартную страницу можно добавить кнопку, под которой лежит JS код который делает AJAX SOAP вызовы на сервер для выполнения каких то нехитрых операций с записями, как-то добавить новую дочернуюю запись, перенумеровать дочерние записи. При этом не предполагается, что потребуется пользовательский ввод. Но в моем случае он потребовался. есть еще вариант: после ввода не далется AJAX SOAP колы, а делается стандартный GET вызов на кастомную страницу где в URL загружается ввод как параметр, и контроллер той страницы берет парметр и делает, то что нужно. Но проблема в вредительском вводом в JS так и отстается , кроме этого прибавляется необходимость проверять на контроллере. так что хочу понять, что можно сделать плохого в принципе в таком случае, и как это предотвратить а вот и идея: а может не использовать промпт, а поднимать в центре див с селектом и фиксированными вариантами.... Цитата:
OK, что он именно может ввести? как этот ввод может пройти проверку в функции isNumeric(n) и оставаться опасным? или код можно "положить" даже не доходя по цикла, где ввод ипользуется в качестве счетчика? спасибо |
Решил полностью отказаться от использования JS в данном случае. Вся бизнес логика будет выполняться кастомными страницами и их контроллерами, а пользовательский ввод будет осуществляться выбором значения в селекте. Никаких промтов (всплытие которых может быть оключено), никакого произвольного ввода (потенциально опасного), никакого JS (который тоже может отключен).
|
Цитата:
|
Часовой пояс GMT +3, время: 20:38. |