0

我的一个客户有一个网站在过去几天被过度黑客攻击。黑客使用的方法是未知的,但是我已经设法保护了几乎所有的东西,除了关于 SQL 注入的问题。

问题是该网站的源代码非常混乱,而且它有很多很多的表单,这些表单都没有受到 SQL 注入的保护。

我认为的解决方案是防止在网站内提交的任何表单在被检查之前被处理。它将在主“index.php”文件中进行检查,该文件将网站上的每个请求重定向到所需的控制器和模型。

我需要的是一个好的 PHP 脚本(或通过指导我编写此代码来帮助我)来处理所有提交的表单($_GET 和 $_POST)并找出用户是否正在尝试提交任何“sql”数据以及是否所以记录该请求并拒绝提交表单。

这是 index.php 的一部分,我将放置以下代码:

public function load_controller()
{

    $controller_name = $this->uri['controller'];
    $action = $this->uri['action'];
    $param = $this->uri['param'];
    $model = $this->uri['model'];
    $controller_name = ucwords($controller_name);
    $file = ROOT.DS.'admin'.DS.'controller'.DS."$controller_name".'_controller.php';
    if(file_exists($file))
    {

        require_once($file) ; 

        $controller = new $controller_name(); 

        if(method_exists($controller,$action))
        {

            $controller->{$action}($param[0],$param[1],$param[2],$param[3],
        $param[4],$param[5],$param[6],$param[7]);   
        }
        else
        {
            define('HEADER_SENT', '/router.php?num=404');
        }
    }
    else
    {
        define('HEADER_SENT', '/router.php?num=404');
    }
}

当然,如果您认为这不是一个好的解决方案,请告诉我您的想法是什么,并请记住,我们解决此问题的时间有限。

谢谢 :)

4

1 回答 1

4

尝试解析输入是愚蠢的游戏。除非您编写了一个完整的数据库引擎,否则您永远不会做对,并且您说时间至关重要。那么为什么要打扰呢?唯一万无一失的方法是完全消除任何用户输入的机会。

正确的方法是使用参数化查询和/或存储过程,或者,正确实现的某种 ORM 方法只是上述方法的抽象。

于 2013-08-24T19:56:31.543 回答