# 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.]]>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 ได้ที่ลิงก์ด้านล่างนี้
ครอสเรียน WordPress ออนไลน์ฉบับมืออาชีพ จะสอนเกี่ยวกับระบบ WordPress อย่างละเอียด ตั้งแต่เริ่มต้นแบบมือใหม่ จนถึงระบบแบบมืออาชีพ ซึ่งประกอบไปด้วย 3 บทเรียนหลักๆ ดังนี้
# 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.]]>สำหรับท่านที่ใช้ 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.]]>