Wordpress | 1412 https://xvlnw.com I'm on my way Sat, 30 Dec 2023 17:05:53 +0000 th hourly 1 https://wordpress.org/?v=5.5.13 Fixed Table of Redis Object Cache & TTL https://xvlnw.com/topic/879 Sun, 20 Feb 2022 16:04:18 +0000 https://xvlnw.com/?p=879 สำหรับปัญหาหนึ่งของการใช้งาน Plugin: Redis Object Cache ของ WordPress หากเราไม่ได้ตั้งค่า prefix tables ของ DB เราจะได้ค่า Default เป็น wp_ แต่มันสร้างปัญหา เมื่อเราติดตั้ง WordPress มากกว่า 2 เว็บ และมี prefix เดียวกัน ตัว Plugin: Redis Object Cache จะใช้ Prefix Key เดียวกัน ทำให้อ่านเขียนแคชมั่วไป…

The post Fixed Table of Redis Object Cache & TTL first appeared on 1412.]]>
สำหรับปัญหาหนึ่งของการใช้งาน Plugin: Redis Object Cache ของ WordPress หากเราไม่ได้ตั้งค่า prefix tables ของ DB เราจะได้ค่า Default เป็น wp_ แต่มันสร้างปัญหา เมื่อเราติดตั้ง WordPress มากกว่า 2 เว็บ และมี prefix เดียวกัน ตัว Plugin: Redis Object Cache จะใช้ Prefix Key เดียวกัน ทำให้อ่านเขียนแคชมั่วไปหมด ปนกันทั้ง 2 เว็บ เราสามารถแก้ไขปัญหานี้ได้ด้วยการเพิ่ม Perfix ของ Redis เข้าไปครับ

# After define( 'DB_COLLATE', '' );
if(!defined('WP_REDIS_PREFIX')){
define('WP_REDIS_PREFIX', substr(md5(DB_NAME), 0, 6) . '_');
define('WP_REDIS_MAXTTL', 86400);
}

และแถมด้วยอีกคำสั่งก็ค่อ MAXTTL ที่ช่วยกำหนดเวลาของแคช จากค่า Default = 3600 เป็น 86400 (หน่วยเป็นวินาที) เพื่อเพิ่มประสิทธิภาพของแคชครับ

The post Fixed Table of Redis Object Cache & TTL first appeared on 1412.]]>
cf-edge-cache: cache,platform=wordpress https://xvlnw.com/topic/781 Tue, 08 Dec 2020 11:20:51 +0000 https://xvlnw.com/?p=781 หลังจากที่เปลี่ยนมาใช้ LiteSpeed Enterprise พบว่าการส่ง Header จาก Cloudflare เปลี่ยนไป การแคชข้อมูลเป็บแบบสำหรับ Cloudflare WordPress Caching โดยเฉพาะเลย เพราะว่าตัว Cloudflare ทำงานร่วมกับ LiteSpeed Enterprise ได้ดีนั่นเอง Header ที่ส่งกลับมา ลองดูว่าต้องมี 3 ค่านี้ส่งกลับมาที่ Client นะครับ วิธีก…

The post cf-edge-cache: cache,platform=wordpress first appeared on 1412.]]>
หลังจากที่เปลี่ยนมาใช้ LiteSpeed Enterprise พบว่าการส่ง Header จาก Cloudflare เปลี่ยนไป การแคชข้อมูลเป็บแบบสำหรับ Cloudflare WordPress Caching โดยเฉพาะเลย เพราะว่าตัว Cloudflare ทำงานร่วมกับ LiteSpeed Enterprise ได้ดีนั่นเอง

Header ที่ส่งกลับมา

cf-edge-cache: cache,platform=wordpress
x-litespeed-cache: hit
cf-cache-status: HIT

ลองดูว่าต้องมี 3 ค่านี้ส่งกลับมาที่ Client นะครับ วิธีการเช็ค Header ง่ายๆ ก็ใช้ Command line : curl

curl -Iv https://cloudhost.in.th

สำหรับการทดสอบกับ OpenLiteSpeed จะไม่พ่น cf-edge-cache ออกมาครับ ซึ่งก็คาดว่าจะรองรับเฉพาะเวอร์ชั่น LiteSpeed Enterprise เท่านั้น

สำหรับใครที่อยากจะเซตแบบนี้ CloudHost.in.th มีบริการเซตให้ฟรี รองรับ 1 Domain เท่านั้น ดูบริการ Cloud Server สำหรับ WordPress Hosting ได้ที่ลิงก์ด้านล่างนี้

The post cf-edge-cache: cache,platform=wordpress first appeared on 1412.]]>
คอร์สเรียน WordPress ออนไลน์ https://xvlnw.com/topic/730 Wed, 25 Nov 2020 20:19:00 +0000 https://xvlnw.com/?p=730 ครอสเรียน WordPress ออนไลน์ฉบับมืออาชีพ จะสอนเกี่ยวกับระบบ WordPress อย่างละเอียด ตั้งแต่เริ่มต้นแบบมือใหม่ จนถึงระบบแบบมืออาชีพ ซึ่งประกอบไปด้วย 3 บทเรียนหลักๆ ดังนี้ WordPress Basic – จะสอนเกี่ยวกับระบบพื้นฐานการสร้างเว็บไซต์ด้วย WordPress ตั้งแต่แรก จนคุณมีเว็บไซต์เป็นของตัวเองได้ สอนทั้งเช…

The post คอร์สเรียน WordPress ออนไลน์ first appeared on 1412.]]>
Full WordPress Learning

ครอสเรียน WordPress ออนไลน์ฉบับมืออาชีพ จะสอนเกี่ยวกับระบบ WordPress อย่างละเอียด ตั้งแต่เริ่มต้นแบบมือใหม่ จนถึงระบบแบบมืออาชีพ ซึ่งประกอบไปด้วย 3 บทเรียนหลักๆ ดังนี้

  1. WordPress Basic – จะสอนเกี่ยวกับระบบพื้นฐานการสร้างเว็บไซต์ด้วย WordPress ตั้งแต่แรก จนคุณมีเว็บไซต์เป็นของตัวเองได้ สอนทั้งเช่า Cloud Server ติดตั้งระบบ WordPress สอนทำเว็บไซต์ขายสินค้าออนไลน์ สอนติดตั้ง Theme สวยๆ Plugin ที่ทำให้เว็บไซต์ของคุณดูหรูหรามีราคา
  2. WordPress SEO & Google PageSpeed Insights – สอนการทำ SEO บนระบบเว็บไซต์ที่สร้างขึ้นด้วย WordPress CMS และสอนทำคะแนน Google PageSpeed Insights ให้อยู่ในระดับ 90 – 100 ทั้งใน Desktop และ Mobile
  3. WordPress Security – สอนเซตระบบ WordPress ให้ปลอดภัย ไม่โดนแฮก ใครที่มีปัญหา WordPress โดนแฮก ต้องเรียนครอสนี้แล้วคุณจะรู้วิธีการป้องกันแฮกเกอร์เจาะระบบเว็บไซต์ของคุณ (ใช้ได้กับระบบ CMS หรือ Script อื่นๆอีกด้วย)

The post คอร์สเรียน WordPress ออนไลน์ first appeared on 1412.]]>
Security Header ของมันต้องมี https://xvlnw.com/topic/642 Sat, 12 Sep 2020 10:44:08 +0000 https://xvlnw.com/?p=642 Header ที่ควรจะมีใน Nginx config เพื่อเพิ่มความปลอดภัยให้กับเว็บไซต์ของเรา เอาไปไว้ในส่วนของ server { … } นะครับ แล้วถ้าไม่ได้ใช้ Nginx หละ ทำยังไง? เราสามารถใช้ .htaccess rewrite rule ใน Apache ได้ครับ สามารถใช้ได้กับทุกเว็บ ทุก CMS เช่น WordPress เป็นต้น ทดสอบ HTTP Header Validation ได้ที่ลิ…

The post Security Header ของมันต้องมี first appeared on 1412.]]>
Header ที่ควรจะมีใน Nginx config เพื่อเพิ่มความปลอดภัยให้กับเว็บไซต์ของเรา เอาไปไว้ในส่วนของ server { … } นะครับ

# Security headers
add_header X-Frame-Options           "SAMEORIGIN" always;
add_header X-XSS-Protection          "1; mode=block" always;
add_header X-Content-Type-Options    "nosniff" always;
add_header Referrer-Policy           "no-referrer-when-downgrade" always;
add_header Content-Security-Policy   "default-src 'self' http: https: data: blob: 'unsafe-inline' 'unsafe-eval'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

แล้วถ้าไม่ได้ใช้ Nginx หละ ทำยังไง? เราสามารถใช้ .htaccess rewrite rule ใน Apache ได้ครับ

# Security headers
Header add X-Frame-Options           "SAMEORIGIN" always;
Header add X-XSS-Protection          "1; mode=block" always;
Header add X-Content-Type-Options    "nosniff" always;
Header add Referrer-Policy           "no-referrer-when-downgrade" always;
Header add Content-Security-Policy   "default-src 'self' http: https: data: blob: 'unsafe-inline' 'unsafe-eval'" always;
Header add Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

สามารถใช้ได้กับทุกเว็บ ทุก CMS เช่น WordPress เป็นต้น ทดสอบ HTTP Header Validation ได้ที่ลิงก์ https://securityheaders.com

สำหรับความหมายของแต่ละค่า ลองเอาไปค้นหาเพิ่มเติมกันดูนะครับ

The post Security Header ของมันต้องมี first appeared on 1412.]]>
WordPress ป้องกัน Brute Force wp-login.php ด้วย Nginx Rate Limit https://xvlnw.com/topic/612 Fri, 04 Sep 2020 14:13:00 +0000 https://xvlnw.com/?p=612 สำหรับท่านที่ตรวจสอบ Log แล้วพบว่ามีการเรียกใช้งาน wp-login.php แบบ POST /wp-login.php จำนวนมากๆ และแน่นอน ในวินาทีเดียวกัน ก็จะมีหลาย Req ด้วย เรียกได้ว่าโดน Access แบบรัวๆไม่ยั้ง เพื่อสุ่มรหัสผ่าน Login เข้าสู่ระบบ WordPress ของเรานั่นเอง สำหรับท่านที่ใช้ Cloudflare CDN อยู่แล้ว สามารถดูวิธีป้องกั…

The post WordPress ป้องกัน Brute Force wp-login.php ด้วย Nginx Rate Limit first appeared on 1412.]]>
สำหรับท่านที่ตรวจสอบ Log แล้วพบว่ามีการเรียกใช้งาน wp-login.php แบบ POST /wp-login.php จำนวนมากๆ และแน่นอน ในวินาทีเดียวกัน ก็จะมีหลาย Req ด้วย เรียกได้ว่าโดน Access แบบรัวๆไม่ยั้ง เพื่อสุ่มรหัสผ่าน Login เข้าสู่ระบบ WordPress ของเรานั่นเอง

สำหรับท่านที่ใช้ Cloudflare CDN อยู่แล้ว สามารถดูวิธีป้องกันได้จากลิงก์นี้ครับ https://xvlnw.com/topic/370

แต่สำหรับผู้ที่ไม่ได้ใช้งาน Cloudflare เราสามารถใช้งานการตั้งค่า Limit Req ใน Nginx ช่วยได้ครับ โดยหลักการก็คือ เราจะทำการ Limit การเรียกใช้งาน wp-login.php ไม่ให้โดนเรียกเร็วเกินไป หรือเกินกว่าที่ควรจะเป็น โดยตั้งสมติฐานว่า หากเราเป็นผู้ใช้งานทั่วไป เรียกหน้า wp-login.php พิมพ์ User + Pass แล้วก็ Login น่าจะใช้เวลาเร็วสุด ราวๆ 5 – 10 วินาที เพราะฉะนั้น หากเร็วกว่านี้ แสดงว่าเป็นบอทแน่นอน มาดูการตั้งค่ากันเลยครับ

เพิ่ม Limit zone ในส่วนของ http { } โดนค่า 10r/m คือ 10 Req/นาที หรือ 6 Req/วินาที

http{

# เก็บ Log
error_log            /var/log/nginx/error.log warn;
...
# Limits
    limit_req_log_level  warn;
    limit_req_zone       $binary_remote_addr zone=login:10m rate=10r/m;
...
}

เพิ่ม Rule ที่ต้องการเรียกใช้ limit_req ไว้ในส่วนของ server{ … } แนะนำให้วางไว้ก่อน location / หรือแล้วแต่การวาง Config ของแต่ละคนนะครับ

server{
...
# WordPress: throttle wp-login.php
location = /wp-login.php {
    limit_req zone=login burst=2 nodelay;
    # ส่ง Req ไปยัง Backend
    #proxy_pass http://127.0.0.1:8000 // กรณีใช้ Nginx + Apache หรือ Upstream Backend
    #fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; // กรณีใช้ Nginx + PHP-FPM
    # 
}

location / {
...
}
..
}

ทดสอบ Rule ด้วย nginx -t และโหลด Config ด้วย nginx -s reload ตามลำดับ

วิธีการทดสอบ เราสามารถใช้ curl ทดสอบได้ด้วยคำสั่งนี้ โดยเรียกซ้ำๆหลายๆครั้ง เราจะเห็นว่า http status ที่ Return กลับมาจะไม่ใช่ 200 จนกว่าเวลาจะถึงที่อนุญาตให้เรียกใช้งาน ตามที่เรากำหนดไว้

curl -I http://domain.com/wp-login.php

อาการก็จะประมาณนี้ครับ

การตั้งค่า Nginx แบบนี้ จะไม่กระทบกับผู้ใช้งานด้วย แทบจะไม่รู้เลยครับ นอกจากพิมพ์รหัสผ่านเข้าระบบเร็วเกินไป T_T และสำหรับ Hacker ก็จะมีผลทำให้ถ่วงเวลาในการ Bruteforce ลงไปได้ และไม่ทำให้ Server ทำงานหนัก เพราะว่าโดนตัดการเชื่อมต่อตั้งแต่ด่านหน้าที่เป็น Nginx และยังไม่เข้าไปถึง Backend นั่นเองครับ

สำหรับ Nginx Rate Limit ยังสามารถนำเอาไปปรับปรุงใช้กับ Page อื่นๆที่ไม่ต้องการให้เรียกถี่เกินไปก็ได้นะครับ แล้วแต่ว่าระบบเราจะออกแบบไว้แบบไหน ซึ่งก็ถือว่ามีประโยชน์มากๆครับกับ Feature นี้

The post WordPress ป้องกัน Brute Force wp-login.php ด้วย Nginx Rate Limit first appeared on 1412.]]>