安全的URL功能?

时间:2013-05-19 11:05:19

标签: php security url session query-string

我公司的网站遭到黑客入侵,我现在正在谨慎地恢复网站。该公司希望尽快启动该网站,因此我没有足够的时间来重新编写软件漏洞的代码,所以我在执行以下操作后将其恢复:

  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. 我现在担心网址。我不确定它有多安全,它是一个双语网站,这是它的方式(这部分代码是由以前的开发人员,我真的不明白):
  5. 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;
    

    此处是否存在一些漏洞?或者到目前为止我是否合理安全?

1 个答案:

答案 0 :(得分:-1)

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

关于更改语言(在会话中)。代码似乎很安全,因为没有人可以注入或改变某些东西。

在线下:

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

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