PHP转义输入变量

Tur*_*Ali 0 php

我正在使用以下功能来保护我的数据库免受注入攻击等gets.

function filter($data) {
    global $db;
    $data = trim(htmlentities(strip_tags($data)));
    if (get_magic_quotes_gpc())
        $data = stripslashes($data);

    $data = $db->real_escape_string($data);

    return $data;
}

foreach($_GET as $key => $value) {
    $data[$key] = filter($value);
}
Run Code Online (Sandbox Code Playgroud)

问题是,我想不仅过滤$_GET,但$_POST也.怎么做?

我可以重新分配值$_GET$_POST过滤后?我的意思是$_GET[$key] = filter($value);代替$data[$key] = filter($value);..

Arn*_*anc 6

不要预先转义变量,只在你需要转义它们时才转义它们.

  • 如果你过早地逃避变量,你永远不会知道哪个变量被转义,哪个不是
  • 在进行字符串操作之前,您必须先取消变量,然后重新转义它们
  • 来自不同来源(例如来自API,来自文件甚至来自数据库)的变量将不会被转义.你会忘记逃避它们.
  • 在打印之前你必须取消所有变量的转义(你不想打印',我猜)
  • 您无法为每种可能的情况转义变量.用escapeshellcmd来逃避它们怎么样?

PHP在过去做过这个.它被称为magic_quotes_gpc.

但它的实践非常糟糕,现在已经弃用了,它将从下一版本的PHP中删除.

最好在你需要的时候逃避一切.你打印一个变量?逃避它.你不必记住它是否已经被转义:它不是.