美文网首页
php 过滤请求参数防止xss和sql注入 2023-06-03

php 过滤请求参数防止xss和sql注入 2023-06-03

作者: 阿然学编程 | 来源:发表于2023-06-02 21:44 被阅读0次
    /**
     * @param $params
     * @return array|string|string[]|null
     */
    function filter_input_params($params)
    {
        // 定义各种正则表达式,用于过滤危险输入
        $filter_arr = array(
            // 过滤 HTML 标签
            '/<(\\/?)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^>]*?)>/isU',
            // 过滤 JavaScript 事件
            '/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU',
            // 过滤 SQL 注入字符
            '/select\b|and\b|or\b|like\b|regexp\b|from\b|where\b|update\b|insert\b|exec\b|order\s*by|having\b|drop\b|delete\b|\(|\)|\[|\]|\||<|>|;|:|&|\'|\"|%|\+|-|_|=|\*|\\\\|union|into|load_file|outfile|dump/is',
            // 过滤参数中的 URL,不过建议使用专门的 URL 过滤函数或第三方库
            '/(^|[^\\w])(https?:\\/\\/[^\\s]+)([^\\w]|$)/i',
            // 过滤ASCII码大于127的非法字符
            '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/u',
            // 过滤不可见字符(制表符(Tab)、回车符(CR)、换行符(LF)等)
            '/\p{Cc}+/u'
        );
        if (is_array($params)) {
            array_walk_recursive($params, function (&$v) use ($filter_arr) {
                if (!is_numeric($v)) {
                    if (filter_var($v, FILTER_VALIDATE_URL)) {
                        $v = filter_var($v, FILTER_SANITIZE_URL);
                    } elseif (filter_var($v, FILTER_VALIDATE_EMAIL)) {
                        $v = filter_var($v, FILTER_SANITIZE_EMAIL);
                    } else {
                        $v = strip_tags($v); // 过滤 HTML 标签
                        $v = preg_replace($filter_arr, '', $v); // 去除危险字符
                    }
                    $v = trim($v);
                }
            });
        } else {
            if (!is_numeric($params)) {
                if (filter_var($params, FILTER_VALIDATE_URL)) {
                    $params = filter_var($params, FILTER_SANITIZE_URL);
                } elseif (filter_var($params, FILTER_VALIDATE_EMAIL)) {
                    $params = filter_var($params, FILTER_SANITIZE_EMAIL);
                } else {
                    $params = strip_tags($params); // 过滤 HTML 标签
                    $params = preg_replace($filter_arr, '', $params); // 去除危险字符
                }
                $params = trim($params); // 去除空格
            }
        }
        return $params;
    }
    

    相关文章

      网友评论

          本文标题:php 过滤请求参数防止xss和sql注入 2023-06-03

          本文链接:https://www.haomeiwen.com/subject/mdemedtx.html