我正在尝试为描述字段添加一些验证,以检查用户是否输入了任何脚本/js/jQuery/SQL 查询代码,而不是真正的产品描述。
// Check for disallowed patterns (JavaScript, jQuery, and SQL)
$disallowedPatterns = array(
'/\b(?:alert|confirm|prompt)\b\s*\([^;]*\)\s*;/i' => 'JavaScript code (script tag)',
'/\b(?:alert|confirm|prompt)\s*\([^)]*(?<!["\']\s*;)\)\s*;/i' => 'JavaScript functions with parenthesis (alert, confirm, prompt)',
'/\$\([^)]*\)\.?[a-z]+/i' => 'jQuery-related patterns',
'/\b(?:select|insert|update|delete|union|where)\b/i' => 'SQL keywords'
);
$codeDetected = false;
foreach ($disallowedPatterns as $pattern => $description) {
if (preg_match($pattern, $params['propertydescription'])) {
$codeDetected = true;
break;
}
}
if ($codeDetected) {
throw new Exception("Invalid input. The description contains disallowed content: $description");
}
但不知何故,这对我来说并不是 100% 有效。 我想知道我是否选择了正确的方式或者是否有任何第三方库可以检查/防止相同的情况。
您可以采取以下措施来防止描述字段中的 script/jquery/sql 查询。
入库前制定后端验证规则。
使用此函数 strip_tags 去除所有 html 标签
$描述 = strip_tags($描述);
使用php函数将特殊字符转换为HTML实体。
$description = htmlspecialchars($description);
清理描述以防止sql注入。
$sanitized_description =
mysqli_real_escape_string($database, $description);
使用 javascript 进行客户端验证
使用正则表达式识别类似于脚本或代码的某些模式。