【问题标题】:Prevent SQL injection in PHP [duplicate]防止PHP中的SQL注入[重复]
【发布时间】:2011-08-27 17:44:11
【问题描述】:

可能重复:
How to escape strings in MSSQL using PHP?

我正在制作一个系统,我需要防止 SQL 注入。我正在使用 PHP 和 SQL Server 2008 R2。基本上我想知道的是我是否可以使用:

mysql_real_escape_string

或者是否有针对 SQL Server 的特定版本。任何反馈表示赞赏。

【问题讨论】:

  • 我认为mysql真正的转义字符串对你来说应该足够了,我不确定等待其他答案。
  • @BookOfZeus,不,这不是这个问题的骗局,因为它没有解决 MSSql
  • @Rikudo Sennin,不,你错了。 mysql_real_escape_string 是与 MySql 而非 MSSQL 一起使用的函数
  • @Ibrahim Azhar Armar。你是对的。这是一个几乎完全相同的副本。一定错过了这个,但它有帮助。谢谢

标签: php sql-server


【解决方案1】:

我建议开始使用 PDO。这样你就可以使用参数化查询,它会为你处理几乎所有事情,包括 SQL 注入,而且它支持非常大的 RDBMS,包括 MSSQL。

这里有一些主题可以帮助您入门。

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

http://www.php.net/manual/en/book.pdo.php

【讨论】:

  • 一个更好的解决方案。
  • 感谢易卜拉欣。现在阅读和使用 PDO。事实上,我在某处使用转义字符串读到的并不是那么安全。谢谢
  • 我知道这个问题是在 2011 年提出的,但从 2013 年起 PDO 不再支持 MSSQL。
  • @Andrew,我在任何地方都找不到提到 PHP 不再支持 MSSQL 的消息来源,甚至在 PHP 手册中也没有。其实在PHP手册中明确提到PDO支持MSSQL,这里是源码php.net/manual/en/ref.pdo-sqlsrv.php
  • 对不起 - 我在早些时候有点累的时候发布了 - 我想我的目的是解决有一堆不再受支持的驱动程序:PDO_BDLIB、PDO_ODBC、PDO_SQLSRV、MSSQL 和SQLSRV 是浮动的,但只有 PDO_SQLSRV 和 SQLSRV 仍然支持/推荐用于 Windows(我相信)。 MSSQL 实际上是一个完全独立于任何涉及 PDO 的驱动程序,并且从未相关。我的错。
【解决方案2】:

我为我的项目构建了一个类,也许它可以帮助你

    <?php

    class clean
    {
        public static function stripJS($input)
        {
            return preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $input);
        }

        public static function email($input)
        {
            return clean::stripJS(filter_var($input, FILTER_SANITIZE_EMAIL));
        }

        public static function noTags($input)
        {
            return strip_tags(clean::stripJs($input));
        }

        public static function dbIN($input)
        {
            return mysql_real_escape_string(self::stripJS($input));
        }

        public static function dbOUT($input)
        {
            return stripslashes($input);
        }
    }

$input = clean::dbIN($input);

    ?>

【讨论】:

    【解决方案3】:

    你不能使用mysql特有的转义函数。

    使用在bound parameters 中交易的东西。

    【讨论】:

    • 他使用的是 Microsoft SQL 而不是 MySql
    • @WilliamTWild — 是的。这个答案中有这么多的任何陈述是错误的吗?
    猜你喜欢
    • 2016-04-06
    • 2016-11-13
    • 2018-03-23
    • 2012-08-04
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多