【发布时间】:2013-08-24 19:10:16
【问题描述】:
我的一个客户有一个网站在过去的日子里被过度入侵。黑客使用的方法是未知的,但是我已经设法保护了几乎所有的东西,除了关于 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');
}
}
当然,如果您认为这不是一个好的解决方案,请告诉我您的想法是什么,请记住,我们解决此问题的时间有限。
谢谢:)
【问题讨论】:
-
这不是远程 sql 注入。
-
上面的代码不是sql注入,我想把新代码放在这个代码之外(在上面),以防止从整个网站提交的表单中处理与sql注入相关的字符.
-
只使用参数化查询。那你就不用担心SQL注入了。
标签: php sql sql-server forms