0

我在方法调用、SQL 查询和文件调用中使用$_GET,$_POST$_COOKIE变量 - 有必要转义/重写此用户数据以获得更好的安全性(避免注入攻击等)。你会如何建议这样做?

来自内置逃生功能的一些想法......让果汁流动:

  • 添加反斜杠到:\x00, \n, \r, \, ', "并使\x1a字符串对 SQL 查询安全 - 就像在 mysql_real_escape_string() 中一样。
  • 将接受的字符数限制为[a-zA-Z0-9 _-\.](其中“ \.”是转义的“.”-点)。

感谢您的意见。谢谢。

4

3 回答 3

1

由于转义也取决于您发送数据的系统,我的建议是使用 PHP 提供的函数,专门为每个系统创建。

例如 :

无论哪种方式:不要重新发明轮子!

对于多种输出已经存在转义函数/方法:使用那些!

于 2009-09-25T04:58:08.250 回答
0

另请注意,您必须转义的内容(如果用户输入)是图像位置等

如果有人用这个热链接到图像(例如头像)

http://yoursite.com/admin/user/delete/1

然后你认为的代码是

<img class="avatar" alt="<?php echo $userName; ?>" src="<?php $avatarUrl; ?>" />

如果您以管理员身份登录,您可能会意外删除用户。当然,希望这种删除是通过帖子完成的,但它仍然可以被规避。

在这种情况下,htmlspecialchars()将无济于事。

您可以通过强制所有数据更改方法与帖子一起使攻击者更难,并且您可以通过为每个删除操作生成令牌并在删除之前对其进行验证来使其几乎不可能。

于 2009-09-25T05:56:00.037 回答
0

我是这样使用的:

function escape($sql) {
    // Stripslashes
    if (get_magic_quotes_gpc()) {
        $sql = stripslashes($sql);
    }
    //if this is the intedger
    if (!is_int($sql) || $sql == '0') {
        $sql = "'" . mysql_real_escape_string($sql) . "'";
    }
    return $sql;
}

并在 MySQL 查询中

mysql_query("SELECT SQL_CACHE * FROM `page` WHERE `id` = ".escape($_GET['id'])." LIMIT 1");
于 2009-09-25T08:17:45.503 回答