powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [JS] Обезопасить поле ввода INPUT, защита от инъекций
29 сообщений из 29, показаны все 2 страниц
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615225
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть форма ввода данных для поиска по сайту, какой самый надёжный способ для того, чтоб нельзя было в неё вводить данные типа:

<script>alert("Я злой хакер!8)");</script>

А то сейчас у меня в форму такие данные вводятся вызывая при этом сбой в работе JS скриптов.
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615240
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gororкакой самый надёжный способ для того, чтоб нельзя было в неё вводить данные типа:заменять спецсимволы html на сервере.
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615276
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечGororкакой самый надёжный способ для того, чтоб нельзя было в неё вводить данные типа:заменять спецсимволы html на сервере.

Ну это тоже конечно, но у меня прежде чем добраться до сервера, данные сперва по js скриптам бегают, ну всякие транслиты, обрезания лишнего, фильтры и тд. (для снятия лишней нагрузки на сервер) и вот в них и происходит сбой.

Мне желательно сразу данные из input "обезвредить" и потом уже с ними работать и отправлять на сервер.

Как можно это реализовать?
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615290
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GororКак можно это реализовать?заменять угловые скобки и амперсанд на их спецсимволы.
Код: javascript
1.
str = str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");



теперь эту строку можно будет воткнуть на страницу через innerHTML (ты ведь так делаешь?)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615353
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечGororКак можно это реализовать?заменять угловые скобки и амперсанд на их спецсимволы.
Код: javascript
1.
str = str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");


теперь эту строку можно будет воткнуть на страницу через innerHTML (ты ведь так делаешь?)

Да, в конечном итоге данные выводятся через innerHTML



А как мне ещё от круглых скобок избавиться?

Я добавил:
Код: javascript
1.
str = str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/script/g, "sсript").replace(/>/g, "&gt;");



заменяю в слове script "c" англискую на "c" русскую (так просто для надёжности))

Ещё убрал (;)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615370
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GororА как мне ещё от круглых скобок избавиться?зачем?

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

Goror
Код: javascript
1.
.replace(/script/g, "sсript")

а это вообще нафига? )
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615402
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечGororА как мне ещё от круглых скобок избавиться?зачем?

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

Goror
Код: javascript
1.
.replace(/script/g, "sсript")

а это вообще нафига? )

Не знаю.. у меня что-то сбой даёт вот такой ввод:

<script>alert(111);</script>

убираю "(" и работает нормально, то есть: <script>alert111);</script> ?
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615408
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

может для надежности было бы лучше весь <script>..</script> выкусывать?
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615417
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-Goror,

может для надежности было бы лучше весь <script>..</script> выкусывать?

Может быть. А это как? Мне в принципе нужно сохранять исходный вид текста, но только делать его "без обидным" для JS скриптов.


А щас проверил, у меня чисто alert(1); вызывает сбой, а func(1); к примеру не даёт сбой.



То есть служебная функция JS даёт сбой...

Что делать?
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615435
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

Код: javascript
1.
2.
3.
4.
var pos1=inp_text.indexOf("<script>");
pos2=inp_text.indexOf("</script>"); 
if(pos1!=-1 && pos2!=-1)
  var out_text = inp_text.substr(0, pos1-1)+inp_text.substr(pos2+"</script>".length);



както кривовато :) но вроде работает
я бы лучше посмотрела в сторону готового решения по валидации данных
хотя бы как сделано
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615437
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправочка:) лишку обрезала

var out_text = inp_text.substr(0, pos1)+inp_text.substr(pos2+"</script>".length)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615440
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-,

ну и var pos2; :(
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615509
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-Goror,

Код: javascript
1.
2.
3.
4.
var pos1=inp_text.indexOf("<script>");
pos2=inp_text.indexOf("</script>"); 
if(pos1!=-1 && pos2!=-1)
  var out_text = inp_text.substr(0, pos1-1)+inp_text.substr(pos2+"</script>".length);



както кривовато :) но вроде работает
я бы лучше посмотрела в сторону готового решения по валидации данных
хотя бы как сделано

Будем проверять! ::))
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615532
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

таких <script></script> может быть не одна штука
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615657
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-Goror,

таких <script></script> может быть не одна штука

Неужели нет в js каких нибудь спец функций как в php к примеру htmlspecialchars и тд?

Чтоб без отказано и в одну строчу.
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615690
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

а тебе уже сказали - на сервере, все равно отправлять туда данные,
а если пользователь скрипты отключил? все эти проверки отвалятся
не надо серверу жизнь облегчать, пусть пашет, он железный
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615719
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-Goror,

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

Ну до сервера нужно данные довести, а если у меня будет скрипт сбой давать до отправки данных, что делать тогда?

У меня он поэтапно работает, сперва отслеживает ввод данных, затем транслейт функции, затем обрезка лишнего, фильтры и тд и тп. И это всё на JS. А потом уже на сервер.
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615744
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
<html>
<body>
<script>function iAmValidator(){console.log("Я маленький скриптик, я облечаю жизнь серверу :) ура");}</script>
<form>
<input name="input1" type="text" value="" onchange="iAmValidator();"/>
<input name="save" type="submit" value="save" />
</form>
</body>
</html>



открой эту страничку с включенным джаваскриптом и выключенным,
данные у тебя все равно уйдут на сервер, то есть на сервере полюбому
нужно предусмотреть проверку данных,транслит, и все такое,
а зачем двойная работа?
я конешно утрирую, без джаваскриптов сейчас уже наверное и сайтов
работающих не осталось :) ну мало :),
но обрабатывать входящие данные на сервере прийдется
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615758
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-Goror,

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
<html>
<body>
<script>function iAmValidator(){console.log("Я маленький скриптик, я облечаю жизнь серверу :) ура");}</script>
<form>
<input name="input1" type="text" value="" onchange="iAmValidator();"/>
<input name="save" type="submit" value="save" />
</form>
</body>
</html>



открой эту страничку с включенным джаваскриптом и выключенным,
данные у тебя все равно уйдут на сервер, то есть на сервере полюбому
нужно предусмотреть проверку данных,транслит, и все такое,
а зачем двойная работа?
я конешно утрирую, без джаваскриптов сейчас уже наверное и сайтов
работающих не осталось :) ну мало :),
но обрабатывать входящие данные на сервере прийдется


Ну тут в "лобовую", при нажатии кнопки save, данные через GET запрос, прям в URL строке передаются, а моя форма ввода работает через асинхронные передачи данных, то есть я могу и не менять URL. Ну и на счёт "всю работу отдавать серверу". Ну можно и так, но зачем гонять десятки лишних запросов, когда можно обходиться одним?)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615784
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

я твоей задачи не знаю, сужу по тому што в ветке написано:
скрипты ты вырезал, сделай ещё обработку ошибок try ... catch ...,
чтобы скрипты не падали

одной функции, чтобы обезвредить входящие данные,
в джаваскрипте помоему нет, у всех разное представление о вредных
и полезных данных, все это имхо, я в общемто новичок, меня не слушай
слушай старших камрадов :) удачи
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615806
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-у всех разное представление о вредных
и полезных данных

А что там долго думать, если вводимые пользователем данные, взаимодействуют с скриптами и тд, нарушая при этом их функциональность и создавая потенциальную угрозу, значит данные вредные:) Ежели не мешают работе сервера, не грузят его и тд. Значит полезные данные!)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615812
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

по твоей логике все входные данные вредны :)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615818
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-Goror,

по твоей логике все входные данные вредны :)


Почему все?) Я ведь написал (те которые взаимодействуют с скриптами, нарушая их работу!)

Если к примеру мне в форму введут таймер с интервалом 1 мили.сек и будут отправлять запросы серверу или что-то подобное)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615822
Фотография -k2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

но они же грузят сервер :) ну ладно это все лирика

для валидации данных на клиенте можно потрогать например
jquery.validate.js, но вообще для валидации данных подход другой
- данные не чистятся за пользователем, а проверяются, не прошли
проверку - не отправляются, пусть сам вводит корректные данные
на хабре можно в частности статьи поискать
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38615828
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-k2-Goror,

но они же грузят сервер :) ну ладно это все лирика

для валидации данных на клиенте можно потрогать например
jquery.validate.js, но вообще для валидации данных подход другой
- данные не чистятся за пользователем, а проверяются, не прошли
проверку - не отправляются, пусть сам вводит корректные данные
на хабре можно в частности статьи поискать

Я редко пользуюсь jquery скриптами, они конечно удобные, но довольно массивные библиотеки, + сложно что-то поменять в структуре (даже незначительно)

p.s мне легче самому написать нужную функцию, при этом она будет в 10-100 раз меньше готовых библиотек)

Ну это чисто мой подход)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38616069
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GororМне желательно сразу данные из input "обезвредить" и потом уже с ними работать и отправлять на сервер.
это не отменяет валидации на сервере
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38616507
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилGororМне желательно сразу данные из input "обезвредить" и потом уже с ними работать и отправлять на сервер.
это не отменяет валидации на сервере
Точно. Валидация на клиенте - только для удобства ввода информации (не на ту кнопку нажал), а на сервере - это и есть валидация.
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38616546
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилGororМне желательно сразу данные из input "обезвредить" и потом уже с ними работать и отправлять на сервер.
это не отменяет валидации на сервере

Это понятно, в целом я пока только с alert(); проблему нашел, а так в целом норм.

Да, конечно основная проверка должна быть на сервере, "клиент" может хоть свой комп спалить, это его проблемы)

Но если к примеру есть форма ввода "большой" информации, человек сидит пишет доклад) Всё ок! и вдруг где то на 100001 строчке ввёл слово "alert();", просто в качестве текста и всё, скрипт завис, писатель ругает матом всё и всех и не может понять в чём дело, я чисто об этом подумал)
...
Рейтинг: 0 / 0
[JS] Обезопасить поле ввода INPUT, защита от инъекций
    #38619711
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror, для безопасного удаления потенциально опасного содержимого можно использовать т.н. shadow DOM, который не является частью главного DOM и не виден пользователю. При этом обладает всеми возможностями DOM.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
function sanitizeHTML(html) {
    var doc = document.implementation.createHTMLDocument("Test");
    doc.body.innerHTML = html;
    var nodes = doc.querySelectorAll("script,style,link,object");
    for (var i=0, len=nodes.length; i < len; i++) {
        nodes[i].parentNode.removeChild(nodes[i]);
    }
    return doc.body.innerHTML;
}


Метод незакончен т.к. не удаляет атрибуты с JS кодом (onclick и т.п.), но это можно дописать. Также встречал утверждения что в некоторых браузерах делаются запросы к img из shadow DOM и советуют использовать DOMParser . Однако DOMParser имеют меньшую поддержку по сравнению с createHTMLDocument так что рещай сам что тебе больше подходит.
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / [JS] Обезопасить поле ввода INPUT, защита от инъекций
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]