perplexity-security-basics
Secure your Perplexity integration by managing API keys safely, sanitizing queries, and preventing PII leakage.
Install
mkdir -p .claude/skills/perplexity-security-basics && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/5448" && unzip -o skill.zip -d .claude/skills/perplexity-security-basics && rm skill.zipInstalls to .claude/skills/perplexity-security-basics
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Apply Perplexity security best practices for API key management andKey capabilities
- →Validate API key format
- →Sanitize PII from queries
- →Restrict search domains
- →Rotate API keys
- →Audit security configurations
How it works
The skill provides regex-based sanitization for PII and domain filtering to restrict search results to trusted sources.
Inputs & outputs
When to use perplexity-security-basics
- →Securing Perplexity API keys
- →Auditing PII in search queries
- →Configuring secret management
- →Validating environment configurations
About this skill
Perplexity Security Basics
Overview
Security best practices for Perplexity Sonar API. Key concerns: API key protection (keys start with pplx-), query sanitization (Perplexity searches the open web, so PII in queries gets sent to external sources), and response handling (citations link to third-party sites).
Prerequisites
- Perplexity API key from perplexity.ai/settings/api
- Understanding of environment variable management
.gitignoreconfigured to exclude secret files
Instructions
Step 1: API Key Management
# .env (NEVER commit to git)
PERPLEXITY_API_KEY=pplx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# .gitignore
.env
.env.local
.env.*.local
*.pem
// Validate key format at startup
function validateApiKey(key: string): void {
if (!key) throw new Error("PERPLEXITY_API_KEY is not set");
if (!key.startsWith("pplx-")) {
throw new Error("PERPLEXITY_API_KEY must start with 'pplx-'");
}
if (key.length < 40) {
throw new Error("PERPLEXITY_API_KEY appears truncated");
}
}
validateApiKey(process.env.PERPLEXITY_API_KEY || "");
Step 2: Query Sanitization (Critical)
Perplexity sends your query to the open web for search. Any PII in the query is exposed to external search infrastructure.
function sanitizeQuery(query: string): string {
return query
// Remove email addresses
.replace(/\b[\w.+-]+@[\w-]+\.[\w.]+\b/g, "[email]")
// Remove phone numbers
.replace(/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g, "[phone]")
// Remove SSN
.replace(/\b\d{3}-\d{2}-\d{4}\b/g, "[ssn]")
// Remove credit card numbers
.replace(/\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b/g, "[card]")
// Remove API keys / tokens
.replace(/\b(pplx-|sk-|pk_|sk_live_)\w{20,}\b/g, "[token]")
// Remove AWS keys
.replace(/\bAKIA[A-Z0-9]{16}\b/g, "[aws-key]");
}
async function safeSearch(rawQuery: string) {
const query = sanitizeQuery(rawQuery);
if (query !== rawQuery) {
console.warn("[Security] PII redacted from Perplexity query");
}
return perplexity.chat.completions.create({
model: "sonar",
messages: [{ role: "user", content: query }],
});
}
Step 3: Restrict Search Domains
Use search_domain_filter to prevent Perplexity from searching untrusted or competitor sites.
// Compliance: only search approved sources
const complianceSearch = await perplexity.chat.completions.create({
model: "sonar",
messages: [{ role: "user", content: query }],
search_domain_filter: [
"sec.gov", "nih.gov", "cdc.gov", // Government sources
"nature.com", "science.org", // Academic sources
],
} as any);
// Exclude specific sites
const filteredSearch = await perplexity.chat.completions.create({
model: "sonar",
messages: [{ role: "user", content: query }],
search_domain_filter: [
"-reddit.com", "-quora.com", "-medium.com",
],
} as any);
Step 4: API Key Rotation
set -euo pipefail
# 1. Generate new key at perplexity.ai/settings/api
# 2. Update environment / secret manager
# 3. Verify new key works
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $NEW_PERPLEXITY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"sonar","messages":[{"role":"user","content":"test"}],"max_tokens":5}' \
https://api.perplexity.ai/chat/completions
# Expected: 200
# 4. Delete old key from perplexity.ai/settings/api
Step 5: Security Checklist
- API key stored in environment variable, not code
-
.envfiles in.gitignore - Different API keys per environment (dev/staging/prod)
- Query sanitization strips PII before API calls
-
search_domain_filterused for compliance-sensitive queries - Key rotation scheduled (quarterly minimum)
- Git history scanned for leaked keys
- Response citations validated before displaying to users
Error Handling
| Security Issue | Detection | Mitigation |
|---|---|---|
| API key in git | git log --all -S "pplx-" | Rotate key immediately, add pre-commit hook |
| PII in query | Sanitization function | Strip before sending to Perplexity |
| Malicious citation URL | URL validation | Allowlist trusted domains |
| Key shared across envs | Config audit | Separate keys per environment |
Output
- Secure API key storage pattern
- PII sanitization for search queries
- Domain-filtered search for compliance
- Key rotation procedure
Resources
Next Steps
For production deployment, see perplexity-prod-checklist.
Prerequisites
Limitations
- →PII sanitization relies on regex patterns
How it compares
This approach proactively prevents PII exposure to external search infrastructure before API calls are made.
Compared to similar skills
perplexity-security-basics side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| perplexity-security-basics (this skill) | 1 | 27d | Caution | Intermediate |
| solana-dev | 0 | 4mo | No flags | Beginner |
| fix-dependabot-alerts | 18 | 6mo | Review | Intermediate |
| security-audit | 3 | 6mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
solana-dev
solanabr
Unified skill hub for Solana development. Routes to external submodule skills (solana-foundation, sendai, solana-game, trailofbits, cloudflare, qedgen, colosseum) and local skills. Progressive disclosure — read only what you need.
fix-dependabot-alerts
microsoft
Fix Dependabot security alerts by updating vulnerable npm dependencies. Use when the user mentions "dependabot", "security alerts", "vulnerability", "CVE", or wants to update packages with security issues.
security-audit
ruvnet
Comprehensive security scanning and vulnerability detection. Includes input validation, path traversal prevention, CVE detection, and secure coding pattern enforcement. Use when: authentication implementation, authorization logic, payment processing, user data handling, API endpoint creation, file upload handling, database queries, external API integration. Skip when: read-only operations on public data, internal development tooling, static documentation, styling changes.
security-scanning-security-sast
sickn33
Static Application Security Testing (SAST) for code vulnerability analysis across multiple languages and frameworks
middleware-protection
dadbodgeoff
Protect routes with Next.js middleware. Check authentication once, protect routes declaratively. Supports public routes, protected routes, and role-based access.
scanning-for-xss-vulnerabilities
jeremylongshore
Execute this skill enables AI assistant to automatically scan for xss (cross-site scripting) vulnerabilities in code. it is triggered when the user requests to "scan for xss vulnerabilities", "check for xss", or uses the command "/xss". the skill identifies ref... Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.