防止URL SQL注入

时间:2013-02-01 13:36:55

标签: sql url code-injection

我想知道防止或取消SQL注入或URL的最佳方法。

例如,www.mysite.com/profile.php?id = 18。 这种类型的站点(如果启用MySQL_Error)容易受到注入攻击。 我怎么能阻止它? mysql_real_escape_string将被弃用,所以它很快就会毫无用处。

我尝试了htmlspecialchars(),但它不适用于URL。

3 个答案:

答案 0 :(得分:1)

为防止sql注入,您需要采取许多步骤

  • 从网络用户中删除系统数据库权限
  • 参数化您的输入
  • 使用存储过程
  • 清理并验证您的输入
  • 保护您的错误消息

查看有关该主题的这篇文章

http://www.codeproject.com/Articles/9378/SQL-Injection-Attacks-and-Some-Tips-on-How-to-Prev

答案 1 :(得分:0)

您应该在查询中使用预准备语句。使用此方法,您将阻止SQL注入。

编辑:

您可以在这里找到一些指南/文档:

First

Second

答案 2 :(得分:-1)

  1. 创建能够向您的电子邮件报告所有php错误的内容。您将能够更快地找到错误等,如果有的话,您将需要它来解决问题。 (编码问题通常也是安全问题)代码框1是我为tnhteam.com编写的用于接收错误电子邮件的代码。例如,将其命名为email-error-handler.php并将其包含在您的网站中。
  2. 如果您有多页,请访问您网站上的所有网页或使用Xenu's Link Sleuth (TM)扫描您的网站。并修复所有问题,检查您的电子邮件是否也有错误消息(第一次错误消息可以转到垃圾邮件/垃圾文件夹并为错误消息设置文件夹)
  3. 在此之后,您可能想要Beyond Security(免费提供1个域名)来扫描您的网站,他们会找到有关您网站的所有重要信息和问题,并解决他们发现的所有错误。
  4. 解决网址注入问题:在代码框2中查找代码,有关详细信息,请访问我在代码框2中找到代码的site
  5. 我希望这会帮助你走向正确的方向

    Code Box 1

    <?php
    //===========================================================================\\
    //                                                                           \\
    // Copyright (c) 2000-2015 Willem Vyent.        All rights reserved.         \\
    //---------------------------------------------------------------------------\\
    // http://www.tnhteam.com/                http://www.awesomehosting.org/     \\
    //---------------------------------------------------------------------------\\
    //                                                                           \\
    //                                                                           \\
    //                                                                           \\
    //                                                                           \\
    //         Coded by Willem Vyent                                             \\
    // This program is distributed in the hope that it will be useful, but       \\
    // WITHOUT ANY WARRANTY                                                      \\
    //                                                                           \\
    //                                                                           \\
    //===========================================================================\\
    if(!defined('FILE_PROTECT')) { // You should define this in your pages BEFORE you include this file 
       die('This file cannot be accessed directly!<br /><br />Dit bestand kan niet rechtstreeks worden benaderd<br /><br />Click <a href=\'http://' . $_SERVER['HTTP_HOST'] . '>here</a> to visit our homepage'); // Do not change it's a text for users who visit this document. we included a link as well...
    }
        // Custom error handler - collecting information
        function awesome_error_handler($number, $message, $file, $line, $vars)
    
        {
    $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
        $email = "<p>An error known as number <strong>$number</strong> has been found on line <strong>$line</strong>, this error has been found in file <strong>$file</strong>. The requested URL with errors is $actual_link<br /><p> $message </p>";
    
        $email .= "<pre>" . print_r($vars, 1) . "</pre>";
    
        $headers = 'Content-type: text/html; charset=iso-8859-1' . "";
    
        // Email the error to the webmaster...
        error_log($email, 1, 'your-name@example.com', $headers); // Yor email here...
    
        // Make sure that you decide how to respond to errors (on the user's side)
        // Either echo an error message, or kill the entire project. It's up to you...
        // The code below ensures that we only "die" if the error was more than
        // just a NOTICE.
        if ( ($number !== E_NOTICE) && ($number < 1024) ) {
        die('Sorry, this page is broken, but our coders will fix it ASAP.'); // your message to the website user (visitor)
        }
        }
        // Tell this script to use this error handler when errors found..
        set_error_handler('awesome_error_handler');
        ?>
    

    代码框2

     <?php
     if(isset($_REQUEST["id"])){
    
    if(!is_int($_REQUEST["id"])){
    
        //redirect this person back to homepage
    
     } else {
    
        $id_raw = trim(htmlentities($_REQUEST["id"]));
        $id_secure = mysql_real_escape_string($id_raw);
        $sql = "SELECT * FROM databasetable WHERE id='".$id_secure."'";
    
     }
    }
    ?>