允许社区提交自定义CSS是否存在CSS注入或其他安全漏洞?
自定义社区CSS的安全防护是否足够?
我基于Laravel开发的网站带有“社区”功能,希望让每个社区能像Reddit的subreddit那样自定义页面样式,因此允许用户通过文本框提交自定义CSS代码。
目前我做了以下两项防护措施:
1. 拦截外部URL
首先对用户输入做基础验证,检查内容中是否包含外部URL(这是CSS注入的常见途径),代码如下:
$text = $request->get('styles'); $hasExternalURL = strpos($text, 'http') !== false || strpos($text, 'www.') !== false; if($hasExternalURL){ return response()->json(['error' => 'Error: No external URLs allowed.'], 404); }
2. 验证CSS有效性
调用W3C的CSS验证API确保用户输入是合法的样式表,代码如下:
$response = Http::get('https://jigsaw.w3.org/css-validator/validator', [ 'text' => $text, 'output' => 'soap12', ]); $headersArray = $response->headers(); $validationErrorCount = $headersArray['x-w3c-validator-errors'][0]; if ($validationErrorCount) { return response()->json(['error' => 'Errors found in styles. Try using a CSS validator before submitting styles.'], 404); }
验证通过后,我会将CSS保存为文件并加载到对应社区页面的头部。
想请教这些措施是否足以防范相关漏洞,目前关于允许用户提交自定义样式表的安全资料比较少。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

