0

我公司的网站刚刚被黑,我现在要格外小心地恢复网站。该公司希望该站点尽快启动,因此我没有足够的时间来实际重新编码该软件的漏洞,因此我在执行以下操作后将其恢复:

  1. 禁用网站上的所有输入表单。(基本上,对于所有说action = someform.php我只是someform.php在服务器上重命名的表单,someform1.php以便实际上没有任何东西进入数据库。稍后我将处理 PDO 和防止 SQL 注入的保护)。
  2. 没有留下任何表格,没有$_POST输入需要处理,但仍然有$_GET. 对于每个接受查询字符串的页面,我都检查了每个$_GET['']变量,并确保只在它应该是数字时才处理它。例如。if(isset($_GET['page_id']) && is_numeric($_GET['page_id'])) { /* do something */ }. 黑客似乎已经使用 SQL 注入突破了。
  3. 对于网站的另一部分(目前只有公司员工可以访问),我将其设置为受密码保护的文件夹。我知道黑客仍然可以使用匿名 FTP 或使用其他方式进入,但我希望至少最初能避免 SQL 注入,所以我认为受密码保护的文件夹会有所帮助。这是在现有的安全登录之上。
  4. 我现在担心网址。我不确定它是否安全,它是一个双语网站,这就是它的发展方式(这部分代码是由以前的开发人员编写的,我不太明白):

if($_SERVER['SERVER_NAME'] == 'localhost' || $_SERVER['SERVER_NAME'] == 'salman'){
    $url =zeej_dir.curPageName().'?'.$_SERVER["QUERY_STRING"];
} else {
    $url ='/'.curPageName().'?'.$_SERVER["QUERY_STRING"];
}
$change_url = "http://".$_SERVER['SERVER_NAME'].$url;


if($_SESSION['ln'] == 'en'){ 
        echo '<img src="'.getSiteUrl().'images/arabicicon.jpg" alt="Arabic" width="15" height="15" />';
        echo '<a href="'.getSiteUrl().'change_session.php?page_url='.base64_encode( $change_url ).'" class="top_frametext">Arabic</a>';
    } else {
        echo '<img src="'.getSiteUrl().'images/engicon.jpg" alt="English" width="15" height="15" />';
        echo '<a href="'.getSiteUrl().'change_session.php?page_url='.base64_encode( $change_url ).'" class="top_frametext">English</a>';
    }

这是代码change_session.php

@session_start();
$page_url = isset($_REQUEST['page_url'])?$_REQUEST['page_url']:'';

if($_SESSION['ln'] == 'en'){
    $_SESSION['ln'] ='ar';
} else {
    $_SESSION['ln'] ='en';
}

header("location: ".base64_decode($page_url));exit;

这里有一些通过 URL 的漏洞吗?或者到目前为止我是否得到了合理的保障?

4

1 回答 1

-1

一个提示/注意:关于您提到的 SQL 注入,请确保您始终使用http://php.net/manual/en/pdo.prepared-statements.php

关于更改语言(在会话中)。该代码似乎是安全的,因为没有人可以注入或更改某些内容。

下线:

但是,我在您的 URL 构造中发现了一个问题。它使用 base64_encode 方法使 URL “安全”。但是,任何人都可以对其进行解码(因为它只是一个 base64 编码)。我长期来看,您可以尝试使用存储在用户会话中的生成密钥的一些对称加密。这样,没有人会使用为其他人生成的 URL。

无论如何,在这种情况下更改语言是无害的。上述提议是针对真正需要保护的资源/操作。我的意思是只有授权的人才能访问它(而不仅仅是拥有被盗的 URL)。当然,还有其他方法可以保护您的网站。这只是一个实用的建议。

于 2013-05-19T11:19:19.577 回答