WordPress WooCommerce Shift Left Security —

Shift Left Security คืออะไรและทำไมต้องใช้กับ WooCommerce

Shift Left Security เป็นแนวคิดที่ย้ายการทดสอบความปลอดภัยมาไว้ในขั้นตอนแรกๆของ software development lifecycle แทนที่จะรอตรวจสอบตอนก่อน deploy หรือหลัง deploy ซึ่งแก้ไขได้ยากและค่าใช้จ่ายสูง Shift Left ทำให้ตรวจพบช่องโหว่ตั้งแต่ตอนเขียนโค้ดหรือตอน commit
WooCommerce เป็น e-commerce platform ที่สร้างบน WordPress มีข้อมูลสำคัญเช่น ข้อมูลลูกค้า ที่อยู่จัดส่ง ข้อมูลการชำระเงิน ประวัติการสั่งซื้อ ทำให้เป็นเป้าหมายของ hackers การใช้ Shift Left Security ช่วยลดความเสี่ยงตั้งแต่ขั้นตอนการพัฒนา
ช่องโหว่ที่พบบ่อยใน WordPress/WooCommerce ได้แก่ SQL Injection ผ่าน custom queries ที่ไม่ใช้ prepared statements, Cross-Site Scripting (XSS) จากการไม่ sanitize input/output, Cross-Site Request Forgery (CSRF) จากการไม่ใช้ nonce verification, Insecure Direct Object Reference (IDOR) ที่เข้าถึงข้อมูล order ของคนอื่นได้ และ File Upload Vulnerability จากการไม่ตรวจสอบ file type
Shift Left Security Pipeline สำหรับ WooCommerce ประกอบด้วย Pre-commit hooks ที่ตรวจสอบโค้ดก่อน commit, SAST ที่วิเคราะห์ source code หา vulnerabilities, Dependency scanning ที่ตรวจสอบ plugins/libraries ที่มีช่องโหว่, DAST ที่ทดสอบ running application และ Continuous monitoring หลัง deploy
ตั้งค่า Security Scanning ใน CI/CD Pipeline
สร้าง CI/CD Pipeline ที่รวม security scanning ทุกขั้นตอน
# .github/workflows/woocommerce-security.yml
name: WooCommerce Security Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
sast-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
tools: composer
- name: Install dependencies
run: composer install --no-interaction
# PHP Security Scanner
- name: Run PHPStan Security
run: |
composer require --dev phpstan/phpstan
vendor/bin/phpstan analyse wp-content/plugins/my-plugin/ \
--level=6 --error-format=json > phpstan-results.json
# PHPCS Security Sniffs
- name: Run PHPCS Security Audit
run: |
composer require --dev pheromone/phpcs-security-audit
vendor/bin/phpcs --standard=Security \
wp-content/plugins/my-plugin/ \
--report=json > phpcs-security.json
# Semgrep SAST
- name: Run Semgrep
uses: returntocorp/semgrep-action@v1
with:
config: >-
p/php
p/wordpress
p/sql-injection
p/xss
generateSarif: true
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: semgrep.sarif
dependency-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Composer Audit
- name: Composer Security Audit
run: composer audit --format=json > composer-audit.json
# WPScan for plugin vulnerabilities
- name: WPScan Plugin Check
run: |
docker run --rm wpscanteam/wpscan \
--url } \
--enumerate vp, vt \
--api-token } \
--format json > wpscan-results.json
# npm audit for JS dependencies
- name: NPM Security Audit
run: |
cd wp-content/themes/my-theme
npm audit --json > npm-audit.json
- name: Check Critical Vulnerabilities
run: |
python3 scripts/check_vulns.py \
--composer composer-audit.json \
--npm npm-audit.json \
--fail-on critical, high
dast-scan:
needs: [sast-scan, dependency-scan]
runs-on: ubuntu-latest
steps:
- name: OWASP ZAP Scan
uses: zaproxy/action-full-scan@v0.10.0
with:
target: }
rules_file_name: 'zap-rules.tsv'
cmd_options: '-a -j'
- name: Upload ZAP Report
uses: actions/upload-artifact@v4
with:
name: zap-report
path: report_html.html
Static Application Security Testing (SAST) สำหรับ WordPress
ตั้งค่า SAST tools สำหรับตรวจสอบโค้ด WordPress
# === Pre-commit Hook สำหรับ Security ===
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: php-security-check
name: PHP Security Check
entry: bash -c 'vendor/bin/phpcs --standard=Security "$@"'
language: system
files: '\.php$'
- id: no-eval
name: Block eval() usage
entry: 'eval\s*\('
language: pygrep
files: '\.php$'
- id: no-exec
name: Block exec/shell_exec
entry: '(exec|shell_exec|system|passthru|popen)\s*\('
language: pygrep
files: '\.php$'
- id: no-raw-sql
name: Block raw SQL queries
entry: '\$wpdb->(query|get_results|get_row|get_var)\s*\(\s*["\$]'
language: pygrep
files: '\.php$'
# === Semgrep Custom Rules สำหรับ WordPress ===
# .semgrep/wordpress-security.yml
rules:
- id: wp-sql-injection
patterns:
- pattern: $wpdb->query($QUERY)
- pattern-not: $wpdb->query($wpdb->prepare(...))
message: "SQL query without prepare() — SQL Injection risk"
severity: ERROR
languages: [php]
- id: wp-xss-echo
patterns:
- pattern: echo $_GET[...];
- pattern: echo $_POST[...];
- pattern: echo $_REQUEST[...];
message: "Direct echo of user input — XSS risk. Use esc_html()"
severity: ERROR
languages: [php]
- id: wp-missing-nonce
patterns:
- pattern: |
function $FUNC() {
...
update_option(...);
...
}
- pattern-not: |
function $FUNC() {
...
wp_verify_nonce(...);
...
}
message: "State-changing function without nonce verification — CSRF risk"
severity: WARNING
languages: [php]
- id: wp-unsafe-redirect
patterns:
- pattern: wp_redirect($_GET[...])
- pattern: wp_redirect($_POST[...])
message: "Redirect using user input — Open Redirect risk. Use wp_safe_redirect()"
severity: ERROR
languages: [php]
# === PHPStan Security Extension ===
# phpstan.neon
includes:
- vendor/phpstan/phpstan-strict-rules/rules.neon
parameters:
level: 6
paths:
- wp-content/plugins/my-woocommerce-plugin
ignoreErrors: []
checkMissingIterableValueType: false
Dependency Scanning และ Vulnerability Management

ตรวจสอบ plugins, themes และ dependencies ที่มีช่องโหว่
Hardening WooCommerce ด้วย Security Headers และ WAF
ตั้งค่า security headers และ Web Application Firewall
Automated Security Testing ด้วย WPScan และ Custom Scripts
สร้าง automated security testing workflow
FAQ คำถามที่พบบ่อย
Q: Shift Left Security เพิ่มเวลาในการ develop มากไหม?
A: ในช่วงแรกอาจเพิ่มเวลา 10-15% เพราะต้อง setup tools และ fix findings แต่ในระยะยาวจะประหยัดเวลามากเพราะพบ bugs เร็วขึ้น ค่าใช้จ่ายในการแก้ bug ที่พบในขั้น development ต่ำกว่าที่พบใน production ถึง 30 เท่า pre-commit hooks ทำงานไม่กี่วินาทีต่อ commit
Q: WooCommerce plugins ที่ต้องระวังเรื่อง security มีอะไรบ้าง?
A: ต้องระวัง plugins ที่ไม่ได้อัปเดตนานกว่า 6 เดือน plugins จาก developers ที่ไม่น่าเชื่อถือ plugins ที่มี less than 1000 active installations และ nulled/pirated plugins ที่อาจมี backdoor ฝังอยู่ ควรใช้เฉพาะ plugins จาก WordPress.org หรือ vendors ที่เชื่อถือได้ และอัปเดตทันทีที่มี security patch
Q: ต้อง PCI DSS compliance สำหรับ WooCommerce ไหม?
A: ถ้าใช้ payment gateway แบบ hosted (เช่น Stripe, PayPal) ที่ redirect ลูกค้าไปชำระเงินที่ gateway โดยตรง WooCommerce site จะอยู่ในระดับ PCI DSS Level 4 SAQ A ซึ่งข้อกำหนดน้อยที่สุด แต่ถ้ารับ credit card data โดยตรงบน site ต้อง comply กับ PCI DSS Level 1-3 ซึ่งซับซ้อนมาก แนะนำใช้ hosted payment forms เสมอ
Q: ควร scan security บ่อยแค่ไหน?
A: SAST ควร run ทุก commit ผ่าน pre-commit hooks และ CI/CD dependency scanning ควร run ทุกวันหรือทุก commit DAST scanning ควร run อย่างน้อยสัปดาห์ละครั้ง full penetration test ควรทำอย่างน้อยปีละครั้งหรือเมื่อมี major changes และ WPScan ควร run ทุกวันเพื่อตรวจสอบ plugin vulnerabilities ใหม่





