• February 4, 2024

    ในเว็บมีฟลายฟอร์มการส่งข้อมูล มีพวกเกรียน ยิง script ใส่ฟอร์มข้อมูล ผ่าน captcha ตัวเลข (captcha แบบง่ายๆ ซึ่ง captcha ดังกล่าวตั้งใจไว้เพียงกันการส่งฟอร์มไม่ให้ง่ายเกินไป )

    การป้องกัน

    จำกัดจำนวนครั้งที่สามารถส่งข้อมูลจาก IP หรือที่อยู่อีเมลเฉพาะได้ แบบไม่ใช้ฐานข้อมูล

    <?php
    
    // ตั้งค่าจำนวนครั้งสูงสุดที่อนุญาต
    $max_attempts = 5;
    
    // เก็บ IP address ของผู้ใช้
    $ip_address = $_SERVER['REMOTE_ADDR'];
    
    // เก็บที่อยู่อีเมลของผู้ใช้
    $email_address = $_POST['email'];
    
    // เก็บจำนวนครั้งที่ส่งข้อมูล
    $attempts = 0;
    
    // ตรวจสอบว่ามีไฟล์บันทึกหรือไม่
    if (file_exists('attempts.txt')) {
      // อ่านข้อมูลจากไฟล์บันทึก
      $attempts_data = file_get_contents('attempts.txt');
      
      // แปลงข้อมูล JSON เป็น array
      $attempts_array = json_decode($attempts_data, true);
    
      // ตรวจสอบว่ามีข้อมูล IP address และที่อยู่อีเมลของผู้ใช้หรือไม่
      if (isset($attempts_array[$ip_address])) {
        $attempts = $attempts_array[$ip_address];
      }
      if (isset($attempts_array[$email_address])) {
        $attempts += $attempts_array[$email_address];
      }
    }
    
    // ตรวจสอบว่าเกินจำนวนครั้งที่อนุญาตหรือไม่
    if ($attempts >= $max_attempts) {
      // แสดงข้อความแจ้งเตือน
      echo 'คุณส่งข้อมูลเกินจำนวนครั้งที่อนุญาต';
      exit;
    }
    
    // เพิ่มจำนวนครั้งที่ส่งข้อมูล
    $attempts++;
    
    // บันทึกข้อมูลการส่ง
    $attempts_array[$ip_address] = $attempts;
    $attempts_array[$email_address] = $attempts;
    
    // แปลง array เป็น JSON
    $attempts_data = json_encode($attempts_array);
    
    // บันทึกข้อมูลลงในไฟล์
    file_put_contents('attempts.txt', $attempts_data);
    
    // ดำเนินการต่อด้วยการประมวลผลข้อมูล
    
    ?>
    
    โค้ดนี้ใช้ไฟล์ attempts.txt เพื่อเก็บข้อมูลจำนวนครั้งที่ส่งข้อมูล
    ตัวแปร $max_attempts เก็บจำนวนครั้งสูงสุดที่อนุญาตให้ส่งข้อมูล
    โค้ดจะดึง IP address และที่อยู่อีเมลของผู้ใช้
    โค้ดจะอ่านข้อมูลจำนวนครั้งที่ส่งข้อมูลจากไฟล์
    โค้ดจะตรวจสอบว่าเกินจำนวนครั้งที่อนุญาตหรือไม่
    โค้ดจะเพิ่มจำนวนครั้งที่ส่งข้อมูล
    โค้ดจะบันทึกข้อมูลจำนวนครั้งที่ส่งข้อมูลลงในไฟล์

    วิธีที่ง่ายกว่านั้น เราสามารถใช้ session ตรวจสอบ IP ของผู้ใช้ได้

    <?php
    session_start();
    
    // ตรวจสอบว่ามี session IP address หรือไม่
    if (!isset($_SESSION['ip_address'])) {
      // เก็บ IP address ของผู้ใช้
      $_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];
      // ตั้งค่าจำนวนครั้งที่ส่งข้อมูล
      $_SESSION['attempts'] = 0;
    }
    
    // เพิ่มจำนวนครั้งที่ส่งข้อมูล
    $_SESSION['attempts']++;
    
    // ตั้งค่าจำนวนครั้งสูงสุดที่อนุญาต
    $max_attempts = 5;
    
    // ตรวจสอบว่าเกินจำนวนครั้งที่อนุญาตหรือไม่
    if ($_SESSION['attempts'] >= $max_attempts) {
      // แสดงข้อความแจ้งเตือน
      echo 'คุณส่งข้อมูลเกินจำนวนครั้งที่อนุญาต';
      exit;
    }
    
    // ดำเนินการต่อด้วยการประมวลผลข้อมูล
    
    ?>
    
    
    โค้ดนี้ใช้ session เก็บ IP address ของผู้ใช้
    โค้ดจะตรวจสอบว่ามี session IP address หรือไม่
    โค้ดจะเพิ่มจำนวนครั้งที่ส่งข้อมูล
    โค้ดจะตั้งค่าจำนวนครั้งสูงสุดที่อนุญาต
    โค้ดจะตรวจสอบว่าเกินจำนวนครั้งที่อนุญาตหรือไม่
    หมายเหตุ:
    
    คุณต้องปรับแต่งโค้ดนี้ให้เหมาะกับโครงการของคุณ
    คุณสามารถปรับแต่งข้อความแจ้งเตือนได้
    ตัวอย่างเพิ่มเติม:
    
    คุณสามารถใช้ session เก็บข้อมูลอื่น ๆ เกี่ยวกับผู้ใช้ เช่น ที่อยู่อีเมล
    คุณสามารถใช้ session ควบคุมการเข้าถึงหน้าเว็บ
    คุณสามารถใช้ session เก็บข้อมูลตะกร้าสินค้า

    ระยะเวลาที่ session เก็บ IP address ไว้ได้นั้น ขึ้นอยู่กับการตั้งค่า session ของคุณ โดยค่าเริ่มต้น session จะหมดอายุหลังจาก 24 นาที

    อย่างไรก็ตาม คุณสามารถปรับแต่งค่าหมดอายุของ session ได้ดังนี้:

    PHP

    ini_set('session.gc_maxlifetime', 3600); // ตั้งค่า session หมดอายุหลังจาก 1 ชั่วโมง
    
    การตั้งค่า session หมดอายุเร็วเกินไป อาจทำให้ผู้ใช้ต้องล็อกอินบ่อย
    การตั้งค่า session หมดอายุช้าเกินไป อาจทำให้ผู้ใช้เสี่ยงต่อการถูกแฮ็ค
    
    ค่าเริ่มต้น session ของ PHP จะหมดอายุหลังจาก 24 นาที
    
    ดังนั้น โค้ดตัวอย่างนั้น  session จะหมดอายุหลังจาก 24 นาที  โดยไม่ต้องกำหนดอะไรเพิ่มเติม
    
    สาเหตุที่ฉันไม่ได้เขียนโค้ดส่วนที่กำหนด 24 นาที:
    
    เพื่อความเรียบง่าย
    เพื่อให้โค้ดสั้นกระชับ
    เพราะค่าเริ่มต้นของ session อยู่ที่ 24 นาที อยู่แล้ว
    อย่างไรก็ตาม คุณสามารถปรับแต่งค่าหมดอายุของ session ได้
    
    ไม่เชิงว่า 24 นาทีเป็นค่าสากล  แต่เป็นค่าเริ่มต้นของ session ของ PHP
    
    ค่าเริ่มต้น 24 นาที  อาจจะสั้นเกินไปสำหรับบางกรณี  และอาจจะยาวเกินไปสำหรับบางกรณี
    
    ปัจจัยที่ส่งผลต่อค่าหมดอายุของ session:
    
    ประเภทของเว็บไซต์
    ประเภทของข้อมูลที่เก็บใน session
    พฤติกรรมของผู้ใช้
    ตัวอย่าง:
    
    เว็บไซต์ที่ผู้ใช้เข้าใช้งานบ่อย อาจจะตั้งค่า session หมดอายุเร็วกว่าเว็บไซต์ที่ผู้ใช้เข้าใช้งานไม่บ่อย
    เว็บไซต์ที่เก็บข้อมูล sensitive อาจจะตั้งค่า session หมดอายุเร็วกว่าเว็บไซต์ที่เก็บข้อมูลทั่วไป
    เว็บไซต์ที่มีผู้ใช้จำนวนมาก อาจจะตั้งค่า session หมดอายุเร็วกว่าเว็บไซต์ที่มีผู้ใช้จำนวนน้อย
    แนวทางการตั้งค่าค่าหมดอายุของ session:
    
    พิจารณาปัจจัยที่ส่งผลต่อค่าหมดอายุของ session
    ทดสอบค่าหมดอายุของ session กับผู้ใช้จริง
    ปรับแต่งค่าหมดอายุของ session จนกว่าจะเหมาะสมกับเว็บไซต์ของคุณ
    สรุป:
    
    24 นาทีเป็นค่าเริ่มต้นของ session ของ PHP
    คุณสามารถปรับแต่งค่าหมดอายุของ session ได้
    ไม่มีค่าสากลสำหรับค่าหมดอายุของ session
    คุณต้องพิจารณาปัจจัยที่ส่งผลต่อค่าหมดอายุของ session
    คุณต้องทดสอบค่าหมดอายุของ session กับผู้ใช้จริง
    คุณต้องปรับแต่งค่าหมดอายุของ session จนกว่าจะเหมาะสมกับเว็บไซต์ของคุณ
    
    ริงๆแล้ว 24 นาที ไม่ได้เป็นค่าที่ตายตัว  แต่เป็นค่าเริ่มต้นที่ PHP กำหนดมาให้
    
    สาเหตุที่ PHP กำหนดค่าเริ่มต้นไว้ที่ 24 นาที  น่าจะมีหลายสาเหตุ  เช่น:
    
    เพื่อความสมดุลระหว่างความปลอดภัยและความสะดวกของผู้ใช้
    เพื่อป้องกัน session หมดอายุเร็วเกินไป ทำให้ผู้ใช้ต้องล็อกอินบ่อย
    เพื่อป้องกัน session หมดอายุช้าเกินไป ทำให้ผู้ใช้เสี่ยงต่อการถูกแฮ็ค
    อย่างไรก็ตาม คุณสามารถปรับแต่งค่าหมดอายุของ session ได้
    
    ปัจจัยที่ควรพิจารณาในการปรับแต่งค่าหมดอายุของ session:
    
    ประเภทของเว็บไซต์
    ประเภทของข้อมูลที่เก็บใน session
    พฤติกรรมของผู้ใช้
    ตัวอย่าง:
    
    เว็บไซต์ที่ผู้ใช้เข้าใช้งานบ่อย อาจจะตั้งค่า session หมดอายุเร็วกว่าเว็บไซต์ที่ผู้ใช้เข้าใช้งานไม่บ่อย
    เว็บไซต์ที่เก็บข้อมูล sensitive อาจจะตั้งค่า session หมดอายุเร็วกว่าเว็บไซต์ที่เก็บข้อมูลทั่วไป
    เว็บไซต์ที่มีผู้ใช้จำนวนมาก อาจจะตั้งค่า session หมดอายุเร็วกว่าเว็บไซต์ที่มีผู้ใช้จำนวนน้อย
    แนวทางการตั้งค่าค่าหมดอายุของ session:
    
    พิจารณาปัจจัยที่ส่งผลต่อค่าหมดอายุของ session
    ทดสอบค่าหมดอายุของ session กับผู้ใช้จริง
    ปรับแต่งค่าหมดอายุของ session จนกว่าจะเหมาะสมกับเว็บไซต์ของคุณ
    สรุป:
    
    24 นาทีเป็นค่าเริ่มต้นของ session ของ PHP
    คุณสามารถปรับแต่งค่าหมดอายุของ session ได้
    ไม่มีค่าสากลสำหรับค่าหมดอายุของ session
    คุณต้องพิจารณาปัจจัยที่ส่งผลต่อค่าหมดอายุของ session
    คุณต้องทดสอบค่าหมดอายุของ session กับผู้ใช้จริง
    คุณต้องปรับแต่งค่าหมดอายุของ session จนกว่าจะเหมาะสมกับเว็บไซต์ของคุณ
    
    เว็บไซต์บางแห่งอาจระบุค่าเริ่มต้นของ session ไว้ที่ 30 นาที หรือ 180 นาที
    
    สาเหตุที่ค่าเริ่มต้นไม่ตรงกัน  อาจเป็นเพราะ:
    
    เว็บไซต์ใช้ PHP เวอร์ชันที่แตกต่างกัน
    เว็บไซต์มีการปรับแต่งค่าเริ่มต้นของ session
    เว็บไซต์อ้างอิงข้อมูลจากแหล่งที่ไม่น่าเชื่อถือ
    ค่าเริ่มต้นของ session ของ PHP ขึ้นอยู่กับเวอร์ชันของ PHP ที่ใช้:
    
    PHP เวอร์ชัน 5.3.0 ขึ้นไป ค่าเริ่มต้นของ session อยู่ที่ 24 นาที
    PHP เวอร์ชัน 5.2.0 ถึง 5.2.12 ค่าเริ่มต้นของ session อยู่ที่ 30 นาที
    PHP เวอร์ชัน 4.4.0 ถึง 5.1.6 ค่าเริ่มต้นของ session อยู่ที่ 180 นาที
    เว็บไซต์อาจมีการปรับแต่งค่าเริ่มต้นของ session:
    
    เว็บไซต์อาจใช้ฟังก์ชัน ini_set() เพื่อปรับแต่งค่าเริ่มต้นของ session
    เว็บไซต์อาจใช้ไฟล์ php.ini เพื่อปรับแต่งค่าเริ่มต้นของ session
    เว็บไซต์อาจอ้างอิงข้อมูลจากแหล่งที่ไม่น่าเชื่อถือ:
    
    เว็บไซต์อาจอ้างอิงข้อมูลจากเว็บไซต์อื่นที่ outdated
    เว็บไซต์อาจอ้างอิงข้อมูลจากเอกสารที่ไม่ถูกต้อง
    วิธีตรวจสอบค่าเริ่มต้นของ session ของเว็บไซต์:
    
    ดูเอกสารประกอบของ PHP เวอร์ชันที่เว็บไซต์ใช้
    ตรวจสอบไฟล์ php.ini ของเว็บไซต์
    ใช้ฟังก์ชัน ini_get() ดังนี้:
    PHP
    $session_gc_maxlifetime = ini_get('session.gc_maxlifetime');
    echo 'ค่าเริ่มต้นของ session อยู่ที่ ' . $session_gc_maxlifetime . ' นาที';
    Use code with caution. Learn more
    สรุป:
    
    ค่าเริ่มต้นของ session ของ PHP อยู่ที่ 24 นาที
    เว็บไซต์บางแห่งอาจระบุค่าเริ่มต้นไว้ที่ 30 นาที หรือ 180 นาที
    สาเหตุที่ค่าเริ่มต้นไม่ตรงกัน อาจเป็นเพราะเว็บไซต์ใช้ PHP เวอร์ชันที่แตกต่างกัน เว็บไซต์มีการปรับแต่งค่าเริ่มต้นของ session หรือเว็บไซต์อ้างอิงข้อมูลจากแหล่งที่ไม่น่าเชื่อถือ
    คุณสามารถตรวจสอบค่าเริ่มต้นของ session ของเว็บไซต์ได้ โดยดูเอกสารประกอบของ PHP เวอร์ชันที่เว็บไซต์ใช้ ตรวจสอบไฟล์ php.ini ของเว็บไซต์ หรือใช้ฟังก์ชัน ini_get()
    
    
    session สามารถหมดได้เมื่อออกจาก browser ทำให้คนร้ายต้องเข้าเว็บใหม่ ซึ่งก็ทำได้ไม่ยากแค่เขียนโค๊ดให้เปิดเว็บใหม่ในกระบวนการแรก 
    
    
    
    <?php
    session_start();
    
    // กำหนดค่า session_cache_expire ใน php.ini หรือ .htaccess
    ini_set('session.cache_expire', 10); // 300 วินาที (5 นาที)
    
    if (!isset($_SESSION['ip_address'])) {
     $_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];
     $_SESSION['attempts'] = 0;
     $_SESSION['start_time'] = time(); // บันทึกเวลาเริ่มต้น
    }
    
    $_SESSION['attempts']++;
    $max_attempts = 5;
    $session_timeout = 10; // 300 วินาที (5 นาที)
    
    if ($_SESSION['attempts'] >= $max_attempts) {
     echo 'คุณส่งข้อมูลเกินจำนวนครั้งที่อนุญาต';
     exit;
    }
    
    // ตรวจสอบว่า session หมดอายุหรือไม่
    if ((time() - $_SESSION['start_time']) > $session_timeout) {
     session_destroy();
     echo 'Session หมดอายุ กรุณาลองใหม่';
     exit;
    }
    ?>
    <div style="text-align:center">
      <form method="post">
        <input type="password" name="password" placeholder="กรอกรหัสผ่าน">
        <button type="submit">ทำลายเซสชั่น</button>
      </form>
     </div>

    เราจะไม่ใช้ โค๊ดนี้ เพราะ มีผลกับ ninja firewall จะ block IP โค๊ดนี้เก็บ IP ใน session
    ninja firewall ดึงค่าดังกล่าวไปเข้า script

    ที่เคยใช้

    <?php
    session_start();
    // code นี้ส่งผลต่อ dashboard ของ wordpress เว็บทั้งหมด ที่ใช้ใน device เดียวกัน เช่น pc ดังนั้น ต้องเพิ่ม โค๊ดทำลาย session ip address โดยใส่รหัสผ่าน
    // ตรวจสอบว่ามี session IP address หรือไม่  (ใช้ sesstion เก็บ ip ป้องกันสแปมฟอร์มส่งข้อมูล)
    if (!isset($_SESSION['ip_address'])) {
      // เก็บ IP address ของผู้ใช้
      $_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'];
      
      // ตั้งค่าจำนวนครั้งที่ส่งข้อมูล
      $_SESSION['attempts'] = 0;
    }
    // เพิ่มจำนวนครั้งที่ส่งข้อมูล
    $_SESSION['attempts']++;
    // ตั้งค่าจำนวนครั้งสูงสุดที่อนุญาต
    $max_attempts = 5;
    
    // เพิ่มฟิลด์รหัสผ่าน
    if (!isset($_SESSION['password'])) {
      $_SESSION['password'] = 'cymiz'; // ตั้งค่ารหัสผ่านเริ่มต้น
    }
    
    // ตรวจสอบว่าเกินจำนวนครั้งที่อนุญาตหรือไม่
    if ($_SESSION['attempts'] >= $max_attempts) {
      // แสดงข้อความแจ้งเตือน
      echo '<center>';
      echo 'คุณส่งข้อมูลเกินจำนวนครั้งที่อนุญาต';
      echo '</center>'; 
      
      echo "<script>";
      echo "setTimeout(function() {";
      echo "window.location.href = 'warning.php';";
      echo "}, 1000);"; // Redirect after 1 seconds
      echo "</script>";
      exit;
    }
    
    // ตรวจสอบรหัสผ่าน
    if (isset($_POST['password']) && $_POST['password'] === $_SESSION['password']) {
      // รหัสผ่านถูกต้อง ทำลายเซสชั่น
      session_destroy();
      echo 'เซสชั่นของคุณถูกลบเรียบร้อย';
      exit;
    } else {
      // รหัสผ่านไม่ถูกต้อง แสดงข้อความแจ้งเตือน
      echo 'รหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง';
    }
    
    // ดำเนินการต่อด้วยการประมวลผลข้อมูล
    ?>
    <div style="text-align:center">
      <form method="post">
        <input type="password" name="password" placeholder="กรอกรหัสผ่าน">
        <button type="submit">ทำลายเซสชั่น</button>
      </form>
     </div>
     
    <!DOCTYPE html>
    <head>
    <title>ระบบประกันออนไลน์ สมัคร | ขอใบเสนอ | ติดต่อ</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <body style="background: #000;overflow: hidden;>
    <?php
    include_once ('ask.php');
    ?>
    <style>
    input[type=text], select, textarea {
        width: 100%;
    	max-width:50%;
        padding: 5px !important;
        border: 1px solid #ccc;
        border-radius: 4px;
        box-sizing: border-box;
        margin-top: 6px;
        margin-bottom: 5px;
        resize: vertical;
    }
    
    .button-red {
        background-color: #ff0000;
        background-image: -webkit-linear-gradient(top, #ff0000 0%, #c70000 50%, #a90000 50%, #b00000 100%);
        background-image: -webkit-linear-gradient(top,#ff0000 0%, #c70000 50%, #a90000 50%, #b00000 100%);
        background-image: linear-gradient(to bottom,#ff0000 0%, #c70000 50%, #a90000 50%, #b00000 100%);
        border: 1px solid #8a0000;
        border-bottom-width: 1px;
        border-bottom-style: solid;
        border-bottom-color: rgb(138, 0, 0);
        border-bottom: 1px solid #810000;
        border-radius: 5px;
        box-shadow: inset 0 1px 0 0 #ff1d0c;
        color: white;
        display: inline-block;
        font-size: inherit;
        font-weight: bold;
        padding: 12px 18px 10px 18px;
        text-align: center;
        text-decoration: none;
        text-shadow: 0 -1px 1px #730000;
        background: #ff8900 !important;
        background: -moz-linear-gradient(top, #ff8900 0%, #ff3d00 100%) !important;
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff8900), color-stop(100%,#ff3d00)) !important;
        background: -webkit-linear-gradient(top, #ff8900 0%,#ff3d00 100%) !important;
        background: -o-linear-gradient(top, #ff8900 0%,#ff3d00 100%) !important;
        background: -ms-linear-gradient(top, #ff8900 0%,#ff3d00 100%) !important;
        background: linear-gradient(to bottom, #ff8900 0%,#ff3d00 100%) !important;
        border: 1px solid #f60;
        border-bottom-color: #e20;
        box-shadow: inset #f20 0 -5px 15px, inset #fc6 0 1px 1px, rgba(0,0,0,.15) 0px 1px 1px;
    }
    </style>
    <!-- ................. -->
    <?php include  $_SERVER['DOCUMENT_ROOT'].'/fire.html' ?>
    <!-- ................. -->
    
    <form action="request1.php" method="post" enctype="multipart/form-data" name="frmMain">
    <div style="display:none;"><input name="code" type="text" value="<?php echo $_GET["code"]; ?>" /></div>
    <div align="center">
    <!-- เริ่มส่วนของการบวกเลข = ส่วนที่2 -->
    <font color="red" style="font-weight:bold;font-family:fantasy;font-size:1.2em;">
    <?php echo $_SESSION['rand_x']; ?> + <?php echo $_SESSION['rand_y']; ?><br><br><input type="text" name="rand_ans" size="10" placeholder="ให้ท่านใส่คำตอบ จากผลบวกตัวเลขด้านบน" required/></font>
    <!-- จบส่วนของการบวกเลข -->
    
    <input class="button-red" type="submit" name="submit" value="OK">
    
    <br><div style="
    	color: #9e9e9e;
        font-family: kanit;
        font-size: 13px;"><strong style="color:orangered">"ซื้อผ่านเรา เราดูแลคุณ"</strong></div><br>
    
    </div>
    </form>

    การประยุกต์ใช้

    ป้องกันการเข้าถึง dashboard ของ wordpress จากการใช้ share internet ( ซึ่งทุกคนจะเป็น ไอพีเดียวกัน) เราลง ninja และ อัพโค๊ด session นี้ขึ้นเว็บแล้วรันคำสั่งจนเข้าด้วย ip นี้ไม่ได้ ต่อไปการจะเข้าได้ต้องใช้ ip หรือ คือ internet อื่น

    ถามผู้พัฒนา
    NinjaFirewall doesn’t block IP, instead it blocks the request.
    Can you go to “NinjaFirewall > Logs”, and look in the log for the lines that show your blocked IP address, and paste them here (you can anonymize (ไม่ระบุชื่อ) your IP). That will tell us why you were blocked.



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories