Israeli developers build web applications without dedicated security scanning tools that account for the Israeli context: Hebrew input requiring special sanitization, Unicode bidirectional text attacks, Privacy Protection Law requirements, and leakage of Israeli service API keys. Without tailored scanning, vulnerabilities specific to Israeli applications remain undetected.
Author: @skills-il
Security scanning guidance for Israeli web applications covering OWASP Top 10, Israeli Privacy Protection Authority (PPA) compliance, dependency vulnerability scanning, secrets detection, and secure coding patterns for Hebrew/RTL apps.
npx skills-il add skills-il/security-compliance --skill israeli-appsec-scannerSecurity scanning and compliance guidance tailored for Israeli web applications. This skill covers the full spectrum of application security, from OWASP Top 10 verification to Israeli Privacy Protection Authority (PPA) compliance, with special attention to Hebrew/RTL-specific attack vectors.
Work through each category systematically. For each finding, note the severity (Critical/High/Medium/Low) and provide a remediation recommendation.
'; DROP TABLE -- with Hebrew characters).env files with Israeli service credentials are in .gitignorenpm audit or pnpm audit and address critical/high findingstrivy image)Israel's Privacy Protection Law (1981) and its regulations impose specific requirements on applications handling personal data of Israeli residents.
Under Israeli law, certain databases containing personal data must be registered with the PPA:
CHECKLIST: Israeli Privacy Protection Law Compliance
[ ] Consent: Obtain informed consent before collecting personal data
- Consent must be specific, informed, and freely given
- Hebrew consent text must be clear and understandable
- Separate consent for different processing purposes
[ ] Purpose limitation: Use data only for the stated purpose
- Document the purpose in your privacy policy (Hebrew + English)
- Do not repurpose data without fresh consent
[ ] Data minimization: Collect only necessary data
- Review each form field for necessity
- Israeli ID numbers should only be collected when legally required
[ ] Security measures: Implement appropriate technical measures
- Follow PPA's "Information Security Regulations" (2017)
- Conduct annual security assessments
- Maintain access logs for at least 24 months
[ ] Data subject rights: Support access, correction, deletion requests
- Respond within 30 days to data access requests
- Provide data in a structured, machine-readable format
- Hebrew language support for all data subject communications
[ ] Breach notification: Notify PPA and affected individuals
- "Serious security incident" must be reported to PPA
- Notification should be in Hebrew for Israeli residents
- Document all incidents and remediation stepsIsraeli law restricts transfer of personal data outside Israel. Permitted when:
Common scenarios for Israeli apps:
# Run vulnerability scan
pnpm audit
# Fix automatically where possible
pnpm audit --fix
# Generate detailed JSON report
pnpm audit --json > audit-report.json
# Check specific severity levels
pnpm audit --audit-level=high# Scan Docker image
trivy image your-app:latest
# Scan with severity filter
trivy image --severity HIGH,CRITICAL your-app:latest
# Scan filesystem (for local projects)
trivy fs --security-checks vuln,secret,config .
# Generate SARIF report for GitHub integration
trivy image --format sarif --output trivy-results.sarif your-app:latest# Using pip-audit
pip-audit
# With fix suggestions
pip-audit --fix --dry-run
# Scan requirements file
pip-audit -r requirements.txt# Authenticate
snyk auth
# Test for vulnerabilities
snyk test
# Monitor project (continuous)
snyk monitor
# Test specific package
snyk test --package-manager=npmIsraeli applications commonly use service credentials that must never be committed to version control:
Israeli Payment Gateways:
Israeli Services:
# Scan git history
trufflehog git file://. --only-verified
# Scan specific branch
trufflehog git file://. --branch main --only-verified
# Scan with JSON output
trufflehog git file://. --json > secrets-report.json# Scan repository
gitleaks detect --source . --verbose
# Scan with custom config for Israeli services
gitleaks detect --source . --config .gitleaks.toml
# Generate report
gitleaks detect --source . --report-format json --report-path gitleaks-report.jsonRecommended .gitleaks.toml additions for Israeli services:
[[rules]]
id = "cardcom-terminal"
description = "Cardcom Terminal Number"
regex = '''(?i)(cardcom|terminal)[\s]*[=:]\s*["']?\d{6,8}["']?'''
tags = ["israeli-payment"]
[[rules]]
id = "tranzila-supplier"
description = "Tranzila Supplier Code"
regex = '''(?i)(tranzila|supplier)[\s]*[=:]\s*["']?[a-zA-Z0-9]{4,20}["']?'''
tags = ["israeli-payment"]
[[rules]]
id = "israeli-sms-api"
description = "Israeli SMS Gateway API Key"
regex = '''(?i)(cellact|inforu|019sms)[\s_-]*(api|key|token)[\s]*[=:]\s*["']?[a-zA-Z0-9]{16,}["']?'''
tags = ["israeli-service"]Bidirectional control characters can make code appear different from what it actually does. This is especially relevant in Hebrew/English mixed codebases.
Dangerous characters to detect:
Detection script:
import re
import sys
BIDI_CHARS = re.compile(
'[\u202a\u202b\u202c\u202d\u202e\u2066\u2067\u2068\u2069]'
)
def scan_file(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
for line_num, line in enumerate(f, 1):
matches = BIDI_CHARS.findall(line)
if matches:
print(f"WARNING: {filepath}:{line_num} contains "
f"{len(matches)} bidirectional control character(s)")Some Hebrew characters visually resemble Latin characters, enabling phishing and spoofing:
| Hebrew | Latin Lookalike | Unicode |
|---|---|---|
| ס (samekh) | o | U+05E1 |
| ו (vav) | l, 1 | U+05D5 |
| ח (het) | n | U+05D7 |
| ן (final nun) | l | U+05DF |
Mitigation: Normalize and validate all user-facing URLs and identifiers. Reject mixed-script strings in security-sensitive contexts (usernames, URLs, email addresses).
Attackers can use RTL override characters (U+202E) to disguise malicious URLs:
Example: A URL containing U+202E can make "evil.com/gnp.exe" appear as "evil.com/exe.png"Mitigation:
// Validate Hebrew-only input (letters, spaces, common punctuation)
const HEBREW_PATTERN = /^[\u0590-\u05FF\s\-'".,:;!?()]+$/;
// Validate mixed Hebrew/English input
const MIXED_PATTERN = /^[\u0590-\u05FFa-zA-Z0-9\s\-'".,:;!?()@#$%&*]+$/;
// Sanitize Hebrew input for XSS prevention
function sanitizeHebrewInput(input) {
// Remove bidirectional control characters
let sanitized = input.replace(/[\u202a-\u202e\u2066-\u2069]/g, '');
// Standard HTML entity encoding
sanitized = sanitized
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
return sanitized;
}
// Validate Israeli phone number
const IL_PHONE_PATTERN = /^(\+972|0)(5[0-9]|7[2-9])\d{7}$/;
// Validate Israeli ID number (Teudat Zehut) with check digit
function validateIsraeliId(id) {
if (!/^\d{9}$/.test(id)) return false;
let sum = 0;
for (let i = 0; i < 9; i++) {
let digit = parseInt(id[i]) * ((i % 2) + 1);
if (digit > 9) digit -= 9;
sum += digit;
}
return sum % 10 === 0;
}// CORRECT: Parameterized query (safe)
const { data, error } = await supabase
.from('skills')
.select('*')
.ilike('name_he', `%${searchTerm}%`);
// INCORRECT: String concatenation (vulnerable to SQL injection)
// const query = `SELECT * FROM skills WHERE name_he LIKE '%${searchTerm}%'`;
// For raw SQL when parameterized queries are needed:
const { data } = await supabase.rpc('search_skills', {
search_term: searchTerm // Parameter is safely escaped
});// Generate CSRF token for payment form
import { randomBytes } from 'crypto';
function generateCsrfToken(): string {
return randomBytes(32).toString('hex');
}
// Validate on form submission
function validateCsrfToken(session: string, submitted: string): boolean {
return session === submitted && session.length === 64;
}
// In payment form (Hebrew UI)
// <input type="hidden" name="_csrf" value={csrfToken} />// Rate limit OTP requests to prevent abuse
// Israeli SMS costs ~0.05-0.15 NIS per message
const OTP_LIMITS = {
perPhone: { max: 3, windowMs: 15 * 60 * 1000 }, // 3 per 15 min per phone
perIp: { max: 10, windowMs: 60 * 60 * 1000 }, // 10 per hour per IP
global: { max: 1000, windowMs: 60 * 60 * 1000 }, // 1000 per hour globally
};
// Implementation with Redis
async function checkOtpRateLimit(phone: string, ip: string): Promise<boolean> {
const phoneKey = `otp:phone:${phone}`;
const ipKey = `otp:ip:${ip}`;
const phoneCount = await redis.incr(phoneKey);
if (phoneCount === 1) await redis.expire(phoneKey, 900);
if (phoneCount > OTP_LIMITS.perPhone.max) return false;
const ipCount = await redis.incr(ipKey);
if (ipCount === 1) await redis.expire(ipKey, 3600);
if (ipCount > OTP_LIMITS.perIp.max) return false;
return true;
}| Requirement | Israeli Law | GDPR Equivalent | Status |
|---|---|---|---|
| Legal basis for processing | Section 1, PPL | Art. 6 GDPR | [ ] |
| Consent requirements | Section 11, PPL | Art. 7 GDPR | [ ] |
| Right of access | Section 13, PPL | Art. 15 GDPR | [ ] |
| Right to correction | Section 14, PPL | Art. 16 GDPR | [ ] |
| Right to deletion | Section 14A, PPL | Art. 17 GDPR | [ ] |
| Data security measures | Regulations 2017 | Art. 32 GDPR | [ ] |
| Breach notification | Regulation 11A | Art. 33-34 GDPR | [ ] |
| Cross-border transfers | Section 36, PPL | Art. 44-49 GDPR | [ ] |
| Database registration | Section 8, PPL | Art. 30 GDPR (ROPA) | [ ] |
| DPO appointment | Mandatory for certain entities (Amendment 13, Aug 2025): public bodies, data brokers, large-scale sensitive data processors | Art. 37 GDPR | [ ] |
Israeli startups selling to US enterprises often need SOC 2 compliance:
If your application processes Israeli credit cards (Isracard, Leumi Card, CAL):
Use the included scripts to perform automated checks:
# Run the full security audit checklist
python scripts/security-audit-checklist.py --project-dir /path/to/project
# Scan for Israeli service credentials
bash scripts/secrets-scanner.sh /path/to/project
# Generate a compliance report
python scripts/security-audit-checklist.py --project-dir /path/to/project --format json > report.jsonRefer to the references/ directory for detailed guidance on Israeli privacy law and OWASP considerations for Hebrew/RTL applications.
Supported Agents
Run a full security scan of my application against OWASP Top 10 with focus on Hebrew input and RTL attacks
Scan my project for leaked API keys of Israeli services like Cardcom, Tranzila, and Supabase
Check if my application complies with the Israeli Privacy Protection Law and 2017 security regulations
Scan my codebase for hidden Unicode bidirectional characters that could alter code logic
Trust Score
This skill can execute scripts and commands on your system.
1 occurrences found in code
This skill can access environment variables which may contain secrets.
10 occurrences found in code
Assist with Israeli legal research including legislation lookup, case law concepts, Hebrew legal terminology, and legal document preparation guidance. Use when user asks about Israeli law, "chok", "mishpat", "bagatz", court procedures, employment law, contract law, real estate law, or needs help with Hebrew legal terms. Covers civil, commercial, employment, and administrative law. Do NOT use for providing formal legal advice — always recommend consulting a licensed Israeli attorney (orech din). Do NOT use for non-Israeli legal systems.
Audit and ensure Israeli e-commerce legal compliance — Consumer Protection Law, return policies, price display, accessibility, and cookie consent. Use when user asks about "online store compliance Israel", "Chok Hagnat HaTzarchan", "consumer protection Israel", "return policy Israel", "IS 5568 ecommerce", "cookie consent Israel", or "חוק הגנת הצרכן". Covers cooling-off period validation, price display requirements, Hebrew terms of service generation, accessibility compliance (IS 5568), and business disclosure verification. Do NOT use for food-specific compliance (use israeli-food- business-compliance) or privacy/GDPR (use israeli-privacy-shield).
Israeli cybersecurity regulatory framework guidance covering INCD (Ma'arach HaSyber) national directives, Bank of Israel Directive 361 (cyber for financial institutions), Directive 357 (payment security), ISA requirements for TASE-listed companies, and sector-specific rules for fintech and healthtech. Use when user asks about cyber regulation Israel, INCD compliance, Bank of Israel directives, ISA cyber requirements, or sector cyber rules. Do NOT use for privacy law compliance (use israeli-privacy-compliance instead).
Want to build your own skill? Try the Skill Creator · Submit a Skill