如何使用此功能

use*_*157 -6 php variables sql-injection function

可能重复: 如何在mysql插入语句中包含PHP变量

如何使用此函数清除从URL中提取的变量?假设我有$id变量,它是从"www.mydomain.com/single-page?id=534"中提取的,我想在MySQL select语句中使用它之前让它变得安全.

<?php
    class SecureSqlInjection
    {
        function specificData($val)
        {
            $val = htmlspecialchars(stripslashes(trim($val)));
            $val = str_ireplace("script", "blocked", $val);
            $val = mysql_escape_string($val);
            return $val;
        }

        function secureSuperGlobalGET(&$value, $key)
        {
            if(!is_array($_GET[$key]))
            {
                $_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
                $_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
                $_GET[$key] = mysql_real_escape_string($_GET[$key]);
            }
            else
            {
                $c=0;
                foreach($_GET[$key] as $val)
                {
                    $_GET[$key][$c] = mysql_real_escape_string($_GET[$key][$c]);
                    $c++;
                }
            }
            return $_GET[$key];
        }

        function secureSuperGlobalPOST(&$value, $key)
        {
            if(!is_array($_POST[$key]))
            {
                $_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
                $_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
                $_POST[$key] = mysql_real_escape_string($_POST[$key]);
            }
            else
            {
                $c=0;
                foreach($_POST[$key] as $val)
                {
                    $_POST[$key][$c] = mysql_real_escape_string($_POST[$key][$c]);
                    $c++;
                }
            }
            return $_POST[$key];
        }

        function secureGlobals()
        {
            array_walk($_GET, array($this, 'secureSuperGlobalGET'));
            array_walk($_POST, array($this, 'secureSuperGlobalPOST'));
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

小智 7

为了防止SQL注入攻击,您应该在构造查询时转义从用户获得的数据,例如:

$query = "SELECT * FROM `users` WHERE `id` = '" . 
  mysql_real_escape_string($_POST['id']) . "'"; 
Run Code Online (Sandbox Code Playgroud)

(注意值周围的单引号.)

一个更好的主意却是使用准备的SQL语句.魔术引号无论如何都被弃用了,所以不需要stripslashes()超级全局和所有这些诡计.

另外,请htmlspecialchars()仅在输出时使用.现在,您实际上正在使用仍在使用的变量中的HTML实体.

  • 那么,那么一个人做什么呢? (4认同)