@@ -455,48 +455,73 @@ jobs:
455455
456456 # Basic security pattern checks for common WordPress vulnerabilities
457457 echo "Checking for common security issues..."
458+ security_findings=0
459+
460+ grep_php() {
461+ grep -r "$1" \
462+ --include="*.php" \
463+ --exclude-dir=.github \
464+ --exclude-dir=.vscode \
465+ --exclude-dir=build \
466+ --exclude-dir=coverage \
467+ --exclude-dir=plugin-check-build \
468+ --exclude-dir=stubs \
469+ --exclude-dir=tests \
470+ --exclude-dir=vendor \
471+ . 2>/dev/null
472+ }
458473
459474 # Check for potential SQL injection patterns
460- if grep -r "mysql_query\|mysqli_query" --include="*.php" --exclude-dir=.github --exclude-dir=.vscode . 2>/dev/null; then
461- echo "Warning: Direct database queries found. Ensure proper sanitization."
475+ if grep_php "mysql_query\|mysqli_query"; then
476+ echo "::error::Direct database queries found. Ensure proper sanitization."
477+ security_findings=1
462478 fi
463479
464480 # Check for potential XSS vulnerabilities (missing escaping)
465- if grep -r "echo \$_\|print \$_" --include="*.php" --exclude-dir=.github --exclude-dir=.vscode . 2>/dev/null; then
466- echo "Warning: Potential XSS vulnerability found. Ensure output is escaped."
481+ if grep_php "echo \$_\|print \$_"; then
482+ echo "::error::Potential XSS vulnerability found. Ensure output is escaped."
483+ security_findings=1
467484 fi
468485
469486 # Check for file inclusion vulnerabilities
470- if grep -r "include.*\$_\|require.*\$_" --include="*.php" --exclude-dir=.github --exclude-dir=.vscode . 2>/dev/null; then
471- echo "Warning: Potential file inclusion vulnerability found."
487+ if grep_php "include.*\$_\|require.*\$_"; then
488+ echo "::error::Potential file inclusion vulnerability found."
489+ security_findings=1
472490 fi
473491
474492 # Check for eval() usage (security risk)
475- if grep -r "eval(" --include="*.php" --exclude-dir=.github --exclude-dir=.vscode . 2>/dev/null; then
476- echo "Warning: eval() function usage detected. This is a security risk."
493+ if grep_php "eval("; then
494+ echo "::error::eval() function usage detected. This is a security risk."
495+ security_findings=1
477496 fi
478497
479498 # Check for proper nonce usage
480- if grep -r "wp_nonce_field\|wp_verify_nonce\|settings_fields" --include="*.php" --exclude-dir=.github --exclude-dir=.vscode . >/dev/null 2>&1; then
499+ if grep_php "wp_nonce_field\|wp_verify_nonce\|settings_fields" >/dev/null 2>&1; then
481500 echo "WordPress nonce usage detected."
482501 else
483502 echo "Info: Consider adding WordPress nonces for form security."
484503 fi
485504
486505 # Check for proper sanitization functions
487- if grep -r "sanitize_\|esc_" --include="*.php" --exclude-dir=.github --exclude-dir=.vscode . >/dev/null 2>&1; then
506+ if grep_php "sanitize_\|esc_" >/dev/null 2>&1; then
488507 echo "WordPress sanitization functions detected."
489508 else
490- echo "Warning: Limited use of WordPress sanitization functions."
509+ echo "::error::Limited use of WordPress sanitization functions."
510+ security_findings=1
491511 fi
492512
493513 # Check for capability checks
494- if grep -r "current_user_can\|user_can" --include="*.php" --exclude-dir=.github --exclude-dir=.vscode . >/dev/null 2>&1; then
514+ if grep_php "current_user_can\|user_can" >/dev/null 2>&1; then
495515 echo "WordPress capability checks detected."
496516 else
497517 echo "Info: Consider adding user capability checks where appropriate."
498518 fi
499519
520+ if [ "$security_findings" -ne 0 ]; then
521+ echo "::error::WordPress security scan found blocking findings."
522+ exit 1
523+ fi
524+
500525 echo "WordPress security scan completed."
501526
502527 - name : Create issue on security vulnerability
0 commit comments