Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.05.2021, 22:03
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

Сообщение от рони Посмотреть сообщение
Vaska,
запрет ссылок кроме содержащих javascript.ru
javascript.ru поменял на sjavascript.ru.
sjavascript.ru - это уже сторонний домен, его скрипт должен запрещать, а он его пропускает. если этот домен вводить в той последовтельности действий, который я выше описал.
Ответить с цитированием
  #12 (permalink)  
Старый 10.05.2021, 22:09
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
Этот баг легко отследить:
1. введите в чистую форму слово javascript.ru
2. нажмите кнопку Отправить
3. измените слово javascript.ru на sjavascript.ru
4. нажмите кнопку отправить
Скрипт не ругается на сторонний домен и отправляет сообщение.
Ответить с цитированием
  #13 (permalink)  
Старый 10.05.2021, 22:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Vaska,
пока нет вариантов у меня, скрипт делает то что в него заложено
Ответить с цитированием
  #14 (permalink)  
Старый 10.05.2021, 22:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Vaska,
extractDomain взято с просторов инета ...
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.2/jquery.validate.min.js"></script>
    <script>
        $(function() {
            $('a[dstype="consult_submit"]').click(function() {
                $('#save_consult_form2').submit();
            });

            function extractDomain(url) {
                let domain;
                //find & remove protocol (http, ftp, etc.) and get domain
                if (url.indexOf("://") > -1) {
                    domain = url.split('/')[2];
                } else {
                    domain = url.split('/')[0];
                }

                //find & remove www
                if (domain.indexOf("www.") > -1) {
                    domain = domain.split('www.')[1];
                }

                domain = domain.split(':')[0]; //find & remove port number
                domain = domain.split('?')[0]; //find & remove url params

                return domain;
            }


            $.validator.addMethod('removeLink', function(value, element) {
                    let reg = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|(www\.)?[a-zA-Z0-9]+\.[^\s]{2,})/mig
                    let match = value.match(reg);
                    return !match || match.every(link => extractDomain(link) == 'javascript.ru')
                },
                'Сообщение содержит запрещённые ссылки');
            $('#save_consult_form2').validate({
                errorPlacement: function(error, element) {
                    $('span[dstype="error_msg"]').append(error);
                },
                submitHandler: function(form) {
                    ds_ajaxpost('save_consult_form2');
                },
                onkeyup: false,
                rules: {
                    content: {
                        required: true,
                        maxlength: 200,
                        removeLink: true
                    }
                },
                messages: {
                    content: {
                        required: 'Вы не указали вопрос',
                        maxlength: 'Вопрос не должен превышать 200 символов.'
                    }
                }
            });
        });
    </script>
</head>

<body>
    <form method="post" id="save_consult_form2" action='goods/save_consult'>
        <div class="comment-add"><textarea id="textfield3" name="content" type="text" rows="10" cols="70">
         javascript.ru
         https://cdnjs.cloudflare.com/ajax   //для теста удалить эту строку
         https://www.javascript.ru
        </textarea></div>
        <div class="comment-act">
            <a href="JavaScript:void(0);" dstype="consult_submit" class="dss-btn">Отправить</a>
        </div>
        <span id="consultcharcount"></span> <span dstype="error_msg"></span>
    </form>
</body>

</html>
Ответить с цитированием
  #15 (permalink)  
Старый 10.05.2021, 23:32
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

А есть еще такие адреса сайтов
http://ргакфд.рф (там идет переадресация на http://rgakfd.ru/, но тем не менее адрес такой задать можно)
А еще
https://профессии.дети

Есть так же адреса с иероглифами, арабскими буквами .....
Ответить с цитированием
  #16 (permalink)  
Старый 11.05.2021, 03:17
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
да, этот вариант хорошо работает.
Сейчас начал то же самое делать с номерами телефонов. Это оказалось тоже очень интересная тема. Вариантов написания много, нужно все учесть. Полного решения пока в интернете не нашел, хотя вижу, что люди ищут ответы на такие вопросы.
Странно, что такой файл скрипта ещё никто не создал как плагин, чтобы можно было настроить вырезку ссылок, телефонов, емейлов, html...
Может у вас есть вариант регулярного выражения, которое содержит все возможные варианты написания номера телефона на 10, 11, 12 цифр?
Я так понимаю, что сначала нужно из номера телефона удалить все символы: +, -, пробел, точка, различные скобки.
Далее полученные цифры 1234567890 распознавать как номер телефона по количеству числительных символов для 10, 11, 12 цифр.
Получается нужна последовательность действий в функции.

Последний раз редактировалось Vaska, 11.05.2021 в 04:45.
Ответить с цитированием
  #17 (permalink)  
Старый 11.05.2021, 03:24
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

Сообщение от voraa Посмотреть сообщение
А есть еще такие адреса сайтов
http://ргакфд.рф (там идет переадресация на http://rgakfd.ru/, но тем не менее адрес такой задать можно)
А еще
https://профессии.дети

Есть так же адреса с иероглифами, арабскими буквами .....
"Штирлиц не был так близок к провалу, как в этот вечер..,"
Да, вышерасположенный скрипт не распознает домены отличные от латинского написания.
Я думаю тут нужен другой подход.
Нужно проверять слова с точкой и запрещать те слова, у которых точка находится слева без пробела, у всех буквенных символов написанных не на латинице.
Это видимо будет отдельная проверка на основе RegExp.

И кстати, регулярное выражение для PHP, в первом посту, тоже не распознает IDN-домены. Плохо.

Последний раз редактировалось Vaska, 11.05.2021 в 05:09.
Ответить с цитированием
  #18 (permalink)  
Старый 11.05.2021, 07:59
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Смысл бы этого понять.
Защита от спама?
Ну просто режьте все, что начинается с http://, https://, www. и до ближайшего пробельного символа.
Но и перебдеть тоже не хорошо

Сообщение от Vaska
и запрещать те слова, у которых точка находится слева без пробела
Не вариант. Человек может просто забыть поставить пробел после точки в конце предложения.

От всего не защитишься. Если просто написать rgakfd.ru или ргакфд.рф или профессии.дети в адресной строке браузера, то он воспримет это как нормальный адрес. Если все такое резать, то мы просто будем резать невинные ошибки людей, типа "... важен выбор профессии.дети не всегда думают об этом...."
Где то в бдении нужно остановиться.

Лень проверять, а адреса с ip распознаются? Типа http://212.22.95.42/

Последний раз редактировалось voraa, 11.05.2021 в 08:15.
Ответить с цитированием
  #19 (permalink)  
Старый 11.05.2021, 14:11
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

Сообщение от voraa Посмотреть сообщение
Смысл бы этого понять.
Защита от спама?
Да, защита от спама.
Некоторые сайты даже нанимают людей для премодерации или нейросеть подключают.
Видят в спаме прямую угрозу.
Ответить с цитированием
  #20 (permalink)  
Старый 12.05.2021, 11:44
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

Помогли ребята с хабра.
Регулярное выражение, которое видит домены с нелатинскими символами:
'/[^\P{L}a-z]+(\.[^\P{L}a-z]+)+/iu'

Проверено на трех типах доменов https://regex101.com/r/ME9Wwu/1
На сайте для PHP и для javascript хорошо работает, можно применять.

Последний раз редактировалось Vaska, 12.05.2021 в 12:04.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка нескольких элементов alexmixaylov jQuery 10 13.02.2014 20:23
Проверка заполнения элементов формы Olegans Элементы интерфейса 0 07.04.2013 21:11
Проверка select на количество выбранных элементов nikolayseo jQuery 2 09.07.2012 23:01
Скрипт - запрет на загрузку и вывод элементов 365441010 Events/DOM/Window 16 26.03.2010 15:43
Запрет на перемещение элементов html Ilyan (X)HTML/CSS 2 26.03.2010 10:21