私のクライアントの Web サイトは、ここ数日で過度にハッキングされています。ハッカーが使用している方法は不明ですが、SQL インジェクションに関する問題を除いて、ほぼすべてを保護することができました。
問題は、Web サイトのソース コードが非常に乱雑であり、SQL インジェクションから保護されていないフォームが非常に多く含まれていることです。
解決策として私が考えたのは、Web サイト内で送信されたフォームがチェックされる前に処理されないようにすることです。メインの「index.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');
}
}
もちろん、これが良い解決策ではないと思われる場合は、あなたの考えを教えてください。この問題を解決するための時間は限られていることを心に留めておいてください。
ありがとう :)