Class: GuardrailsRuby::Checks::PromptInjection

Inherits:
GuardrailsRuby::Check show all
Defined in:
lib/guardrails_ruby/checks/prompt_injection.rb

Constant Summary collapse

INJECTION_PATTERNS =
[
  # Original patterns
  /ignore\s+(all\s+)?previous\s+instructions/i,
  /ignore\s+(all\s+)?above/i,
  /disregard\s+(all\s+)?previous/i,
  /you\s+are\s+now\s+(a|an)\s+/i,
  /pretend\s+(you('re|\s+are)\s+|to\s+be\s+)/i,
  /act\s+as\s+(a|an|if)\s+/i,
  /new\s+instructions?[:\s]/i,
  /system\s*prompt[:\s]/i,
  /\[\s*system\s*\]/i,
  /<\s*system\s*>/i,
  /```\s*(system|instruction)/i,
  /STOP\.?\s*(forget|ignore|disregard)/i,

  # Role-play and identity attacks
  /from\s+now\s+on\s+(you|your)\s+(are|will|must|should)/i,
  /forget\s+(everything|all|your)\s+(you|about|previous)/i,
  /your\s+new\s+(role|persona|identity|name)\s+(is|will\s+be)/i,
  /you\s+must\s+(now\s+)?(obey|follow|comply)/i,
  /override\s+(your|all|previous)\s+(instructions|rules|guidelines)/i,
  /bypass\s+(your|all|the)\s+(rules|restrictions|filters|safety)/i,

  # Jailbreak patterns
  /do\s+anything\s+now/i,
  /\bDAN\b.*\bmode\b/i,
  /jailbreak/i,
  /developer\s+mode\s+(enabled|on|activated)/i,
  /\bunlocked\s+mode\b/i,

  # Instruction injection via delimiters
  /---\s*(new|system|override)\s*(instructions?|prompt)/i,
  /###\s*(instruction|system|override)/i,
  /<<\s*(SYS|SYSTEM|INST)/i,
  /\[INST\]/i,

  # Encoding attacks
  /base64[:\s]+[A-Za-z0-9+\/=]{20,}/i,
  /hex[:\s]+(?:[0-9a-f]{2}\s*){10,}/i,
  /rot13[:\s]/i,

  # Prompt leaking
  /reveal\s+(your|the)\s+(system\s+)?prompt/i,
  /show\s+me\s+(your|the)\s+(system\s+)?(prompt|instructions)/i,
  /what\s+(are|is)\s+your\s+(system\s+)?(prompt|instructions)/i,
  /repeat\s+(your|the)\s+(system\s+)?(prompt|instructions)/i,
].freeze

Instance Attribute Summary

Attributes inherited from GuardrailsRuby::Check

#options

Instance Method Summary collapse

Methods inherited from GuardrailsRuby::Check

check_name, direction, #initialize, lookup

Constructor Details

This class inherits a constructor from GuardrailsRuby::Check

Instance Method Details

#call(text, context: {}) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/guardrails_ruby/checks/prompt_injection.rb', line 57

def call(text, context: {})
  matched = INJECTION_PATTERNS.select { |p| text.match?(p) }

  if matched.any?
    fail! "Prompt injection detected",
      matches: matched.map(&:source)
  else
    pass!
  end
end