За последние 24 часа нас посетили 17756 программистов и 1685 роботов. Сейчас ищут 1047 программистов ...

Для теста-разминки

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 9 июн 2021.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    PHP:
    1.  
    2. if (filter_input(INPUT_POST, 'do') === session_id()) {
    3.     echo 'Ok';
    4. }
    5. ?>
    6. <!doctype html>
    7. <html lang="ru">
    8. <head>
    9.     <meta charset="UTF-8">
    10.     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    11.     <meta http-equiv="X-UA-Compatible" content="ie=edge">
    12.     <title>
    13.         Убиватель сраного спама
    14.     </title>
    15. </head>
    16. <body>
    17. <form method="post">
    18.     <button name="do">Нажать</button>
    19. </form>
    20. <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    21. <script>
    22.     $('button').click(function () {
    23.         $(this).val(/SESSw*ID=([^;]+)/i.test(document.cookie) ? RegExp.$1 : false);
    24.     });
    25. </script>
    26. </body>
    27. </html>

    Кто может курлом нажать кнопку и получить - Ok?

    Я пока что не смог, ЗНАЮ почему.

    p.s. буду благодарен, если кто-то нажмёт и пояснит - как :)
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    940
    Симпатии:
    145
    PHP:
    1. <pre><?php
    2. var_dump($_POST);
    3. ?></pre>
    4. <form method="post">
    5.     <button name="do">DO</button>
    6. </form>
    1) атрибут value у кнопки отсутствует;
    2) при чём здесь курл, вообще не понял.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    AMOGUS
    --- Добавлено ---
    image20.png
     
    Вероломство нравится это.
  4. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    1. ясен пень отсутствует, потому что он вставляется при нажатии на кнопку )))
    2. надо узнать, можно ли нажать данную кнопку курлом ))) то есть я знаю, что нельзя, но мало ли...
    --- Добавлено ---
    @MouseZver чёт не видно было одно время тебя, дароу :)
     
  5. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    940
    Симпатии:
    145
    Кнопка на клиенте нажимается, подсадив вредоносное расширение с доступом к сайту можно.
    Курлом можно сделать запрос, имея доступ к кукам или угадав id сессии.
     
  6. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    кнопка на клиенте нажимается нажатием на кнопку)))
    курлом нажми кнопку и получи - Ок)))

    ты если прочитаешь из заголовков SID то при отправке на той стороне будет уже другой SID потому что session_start() при каждом curl_exec генерит новый SID )))
     
  7. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    940
    Симпатии:
    145
    Читаем доку по session_start():
    > создаёт сессию, либо возобновляет существующую, основываясь на идентификаторе сессии, переданном через GET- или POST-запрос, либо переданный через cookie.
    Один раз curl'ом получили id сессии (ничего не передавая, скрипт сгенерит сам), второй раз передали его, чтобы "бздынькнуть" по кнопке.
     
  8. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    возобновляет сессию у курла? ))) ну ты дядя даёшь)))

    session_start при каждом curl_exec генерит новый SID дядя)))
     
  9. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    940
    Симпатии:
    145
    session_start() сессию возобновляет по переданной куке в нашем случае, в чём проблема?
     
  10. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    нет, ничего не возобновляется, потому что генерится новый SID для КАЖДОГО curl_exec )))
     
  11. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    PHP:
    1. curl_setopt($ch, CURLOPT_COOKIE, 'SESS123456789asdfhjklzxvnm=123457899asdfghjkkl;');
     
  12. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    940
    Симпатии:
    145
    С чего это, если в запросе будет передан предыдущий session id? Уверен, что внимательно доку вычитал по session_start()?
     
  13. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    ну так ответ будет на вопрос или будем из обрывки идей бросать? )))
     
  14. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    940
    Симпатии:
    145
    В два запроса curl'ом можно сэмулировать нажатие на кнопку для приведённого в первом посте кода.
     
  15. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    то же самое, ответ будет на вопрос? )))
     
  16. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Куки извлечь.
    Выбрать ID сессии со значением.
    Вставить в запрос
     
  17. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    а как ты ещё хотел?))) в одном выполнить забор заголовков и отправку назад?)))
    --- Добавлено ---
    ну это всё идеи и слова
     
  18. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    940
    Симпатии:
    145
    Что значит "я хотел", мы тут твою задачу решали, нет?
    Тебе всё рассказали уже. Или у меня понималка перестала понимать )
     
  19. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    OK
    PHP:
    1. <pre>
    2. <?php
    3.  
    4. $url = 'http://localhost/form.php';
    5. $ch = curl_init($url);
    6. $fp = fopen($url, "rb");
    7.  
    8. curl_setopt($ch, CURLOPT_FILE, $fp);
    9. //curl_setopt($ch, CURLOPT_COOKIE, 'somekey=value');
    10. curl_setopt($ch, CURLOPT_HEADER, 1);
    11. //curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
    12. //curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
    13.  
    14. $data = curl_exec($ch);
    15.  
    16.  
    17. fclose($fp);
    18.  
    19. print_r($data);
    20.  
    21. ?>
     
  20. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    запускаю и получаю - Ok? )))
     
  21. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Нет. Вы хотите готовый скрипт?
     
  22. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    да - это же так просто)))

    нужно получить - Ok
     
  23. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.504
    Симпатии:
    283
    Видите ли, моё первое сообщение в этой теме касалось некоего вашего заблуждения.
    Нести в массы спам-скрипты я не подписывался.
    Но я всегда открыт для деловых предложений.
     
  24. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    хорошая отмазка, особенно если учесть, что в массы несётся убиватель сраного спама и нужен тест)))
     
  25. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    А главное, чем это отличается от того что если нажмет обычный пользюк???)
    открыли курлом - получили из кук ключ сессии
    следующим запросом и с использованием ранее полученных кук - "нажимаем" кнопку - по факту посылаем данные на определенный адрес

    для сервера это будет выглядеть так же как и пользователь

    P.S главный предпосыл вашего скрипта, что при каждом обращении к сайту через курл - у него будет новая сессия. Это если без использования и сохранения кук.. то да. А если с ними - защита пролетает
     
    #25 ADSoft, 10 июн 2021
    Последнее редактирование: 10 июн 2021
    Вероломство нравится это.