CoolFace
Apppublic

admin08077/Githubgemini

sourceHugging Faceotherupdated 10mo agoView on Hugging Face
0likes
SecurityScanner-i1gL3PXN.js.map1 linesDownload Raw Back to assets
1{"version":3,"file":"SecurityScanner-i1gL3PXN.js","sources":["../../services/security/staticAnalysisService.ts","../../components/features/SecurityScanner.tsx"],"sourcesContent":["/**\n * @license\n * SPDX-License-Identifier: Apache-2.0\n*/\n\nexport interface SecurityIssue {\n    line: number;\n    type: string;\n    description: string;\n    severity: 'High' | 'Medium' | 'Low';\n}\n\nconst rules = [\n    {\n        name: 'Hardcoded Secret',\n        regex: /(key|secret|token|password)['\"]?\\s*[:=]\\s*['\"]([a-zA-Z0-9-_.]{16,})['\"]/gi,\n        description: 'A hardcoded secret or API key was found. These should be stored in environment variables.',\n        severity: 'High' as const,\n    },\n    {\n        name: 'dangerouslySetInnerHTML',\n        regex: /dangerouslySetInnerHTML/g,\n        description: 'Use of dangerouslySetInnerHTML can open your application to XSS attacks. Ensure the source is sanitized.',\n        severity: 'Medium' as const,\n    },\n    {\n        name: 'eval() usage',\n        regex: /eval\\(/g,\n        description: 'The use of eval() is a major security risk as it can execute arbitrary code.',\n        severity: 'High' as const,\n    },\n    {\n        name: 'Insecure URL',\n        regex: /http:\\/\\//g,\n        description: 'Found an insecure \"http://\" URL. Use \"https://\" for all external resources.',\n        severity: 'Low' as const,\n    }\n];\n\nexport const runStaticScan = (code: string): SecurityIssue[] => {\n    const issues: SecurityIssue[] = [];\n    const lines = code.split('\\n');\n\n    lines.forEach((line, index) => {\n        rules.forEach(rule => {\n            if (rule.regex.test(line)) {\n                issues.push({\n                    line: index + 1,\n                    type: rule.name,\n                    description: rule.description,\n                    severity: rule.severity,\n                });\n            }\n        });\n    });\n\n    return issues;\n};\n","import React, { useState } from 'react';\nimport { analyzeCodeForVulnerabilities } from '../../services/aiService.ts';\nimport { runStaticScan, SecurityIssue } from '../../services/security/staticAnalysisService.ts';\nimport type { SecurityVulnerability } from '../../types.ts';\nimport { ShieldCheckIcon, SparklesIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\nconst exampleCode = `function UserProfile({ user }) {\n  // TODO: remove this temporary api key\n  const API_KEY = \"sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\n  const userContent = user.bio; // This might contain malicious scripts\n\n  return (\n    <div>\n      <h2>{user.name}</h2>\n      <div dangerouslySetInnerHTML={{ __html: userContent }} />\n    </div>\n  );\n}`;\n\nexport const SecurityScanner: React.FC = () => {\n    const [code, setCode] = useState(exampleCode);\n    const [localIssues, setLocalIssues] = useState<SecurityIssue[]>([]);\n    const [aiIssues, setAiIssues] = useState<SecurityVulnerability[]>([]);\n    const [isLoading, setIsLoading] = useState(false);\n    const [error, setError] = useState('');\n\n    const handleScan = async () => {\n        if (!code.trim()) {\n            setError('Please enter code to scan.');\n            return;\n        }\n        setIsLoading(true);\n        setError('');\n        setLocalIssues([]);\n        setAiIssues([]);\n        try {\n            // Run local scan first\n            const staticIssues = runStaticScan(code);\n            setLocalIssues(staticIssues);\n            \n            // Then run AI scan\n            const geminiIssues = await analyzeCodeForVulnerabilities(code);\n            setAiIssues(geminiIssues);\n\n        } catch (err) {\n            setError(err instanceof Error ? err.message : 'An error occurred during scanning.');\n        } finally {\n            setIsLoading(false);\n        }\n    };\n\n    const SeverityBadge: React.FC<{ severity: string }> = ({ severity }) => {\n        const colors: Record<string, string> = {\n            'Critical': 'bg-red-500 text-white',\n            'High': 'bg-red-400 text-white',\n            'Medium': 'bg-yellow-400 text-yellow-900',\n            'Low': 'bg-blue-400 text-white',\n            'Informational': 'bg-gray-400 text-gray-900',\n        };\n        return <span className={`px-2 py-0.5 text-xs font-bold rounded-full ${colors[severity] || 'bg-gray-300'}`}>{severity}</span>\n    }\n\n    return (\n        <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n            <header className=\"mb-6\">\n                <h1 className=\"text-3xl font-bold flex items-center\"><ShieldCheckIcon /><span className=\"ml-3\">AI Security Co-Pilot</span></h1>\n                <p className=\"text-text-secondary mt-1\">Find vulnerabilities in your code with static analysis and AI.</p>\n            </header>\n            <div className=\"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0\">\n                <div className=\"flex flex-col\">\n                    <label className=\"text-sm mb-2\">Code to Scan</label>\n                    <textarea value={code} onChange={e => setCode(e.target.value)} className=\"w-full flex-grow p-2 bg-surface border rounded font-mono text-xs\" />\n                    <button onClick={handleScan} disabled={isLoading} className=\"btn-primary w-full mt-4 py-2 flex justify-center items-center gap-2\">{isLoading ? <LoadingSpinner/> : 'Scan Code'}</button>\n                </div>\n                <div className=\"flex flex-col bg-surface p-4 border rounded-lg\">\n                    <h3 className=\"text-lg font-bold mb-2\">Scan Results</h3>\n                    {error && <p className=\"text-red-500\">{error}</p>}\n                    <div className=\"flex-grow overflow-y-auto pr-2 space-y-4\">\n                        {isLoading && <div className=\"flex justify-center items-center h-full\"><LoadingSpinner/></div>}\n                        {!isLoading && localIssues.length === 0 && aiIssues.length === 0 && <p className=\"text-text-secondary text-center mt-8\">No issues found. Run a scan to begin.</p>}\n                        \n                        {localIssues.length > 0 && <div>\n                            <h4 className=\"font-semibold text-sm mb-1\">Static Analysis Findings</h4>\n                            {localIssues.map((issue, i) => <div key={`local-${i}`} className=\"p-2 bg-background border rounded mb-2\"><p className=\"font-bold flex items-center gap-2\">{issue.type} <SeverityBadge severity={issue.severity} /></p><p className=\"text-xs\">Line {issue.line}: {issue.description}</p></div>)}\n                        </div>}\n\n                         {aiIssues.length > 0 && <div>\n                            <h4 className=\"font-semibold text-sm mb-1 flex items-center gap-1\"><SparklesIcon/> AI-Powered Findings</h4>\n                            {aiIssues.map((issue, i) => (\n                                <details key={`ai-${i}`} className=\"p-2 bg-background border rounded mb-2\">\n                                    <summary className=\"cursor-pointer font-bold flex items-center gap-2\">{issue.vulnerability} <SeverityBadge severity={issue.severity} /></summary>\n                                    <div className=\"mt-2 pt-2 border-t text-xs space-y-2\">\n                                        <p><strong>Description:</strong> {issue.description}</p>\n                                        <p><strong>Mitigation:</strong> {issue.mitigation}</p>\n                                        {issue.exploitSuggestion && (\n                                            <div>\n                                                <strong>Exploit Simulation:</strong>\n                                                <div className=\"mt-1 p-2 bg-gray-50 rounded\">\n                                                     <MarkdownRenderer content={'```bash\\n' + issue.exploitSuggestion + '\\n```'}/>\n                                                </div>\n                                            </div>\n                                        )}\n                                    </div>\n                                </details>\n                            ))}\n                        </div>}\n                    </div>\n                </div>\n            </div>\n        </div>\n    );\n};"],"names":["rules","runStaticScan","code","issues","line","index","rule","exampleCode","SecurityScanner","setCode","useState","localIssues","setLocalIssues","aiIssues","setAiIssues","isLoading","setIsLoading","error","setError","handleScan","staticIssues","geminiIssues","analyzeCodeForVulnerabilities","err","SeverityBadge","severity","colors","jsx","jsxs","ShieldCheckIcon","e","LoadingSpinner","issue","i","SparklesIcon","MarkdownRenderer"],"mappings":"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"}