php 过滤 xss 非法字符

曹え 5811 发布于:2024-06-13 03:40:01

//如果有非法字符显示错误
function containsXSS($url) {
    // 检查URL中是否包含非法字符
    if (preg_match('/<(?:[^>]+[\s\n]*>|[^>]*>)|\son[a-zA-Z]+=("|\').*?("|\')/i', $url)) {
        return true;
    }

    // 如果没有非法字符,返回false
    return false;
}

// 获取当前URL
$currentUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

// 检查当前URL是否包含XSS非法字符
if (containsXSS($currentUrl)) {
    echo '参数错误';
}


// 过滤

function filterXSS($input) {
    // 使用htmlspecialchars函数转换特殊字符为HTML实体
    $input = htmlspecialchars($input, ENT_QUOTES | ENT_HTML5);

    // 使用正则表达式删除不安全的标签和属性
    $input = preg_replace('/<(?:[^>]+[\s\n]*>|[^>]*>)/is', '', $input);
    $input = preg_replace('/style=.*?"/i', '', $input);
    $input = preg_replace('/on[a-zA-Z]+=("|\').*?("|\')/i', '', $input);

    // 返回过滤后的输入
    return $input;
}

// 过滤GET数据
function filterGET() {
    foreach ($_GET as $key => $value) {
        $_GET[$key] = filterXSS($value);
    }
}

// 过滤POST数据
function filterPOST() {
    foreach ($_POST as $key => $value) {
        $_POST[$key] = filterXSS($value);
    }
}

// 在处理用户输入之前调用过滤函数
filterGET();
filterPOST();
function containsSpecialChars($string) {
    // 定义需要检查的特殊字符及其URL编码形式
    $specialChars = ['<', '>', "'", '"', '%3C', '%3E', '%27', '%22'];

    // 遍历特殊字符数组,检查字符串是否包含这些字符
    foreach ($specialChars as $char) {
        if (strpos($string, $char) !== false) {
            return true;
        }
    }

    // 如果没有找到这些符号,返回false
    return false;
}


觉得有用请点个赞吧!
0 236