PHP安全 - 获取变量,URL安全吗?

时间:2011-09-13 14:29:04

标签: php security variables get

我正在创建一个非常基本的iPhone模拟器,我想要做的就是将它放在一个位置,然后我们拥有并希望将它放在任何网站上,我们只需使用它来调用它:{{3} }

有什么我需要注意的可能是不安全的吗?没有涉及数据库或任何东西,但是为了防止有人想要乱七八糟地把一些东西放在URL中,我可以做些什么来帮助使它更安全?

这是我的代码:

<?php
    if(isset($_GET['url'])) {
        $url = $_GET['url'];
        ?>

        <!doctype html>
        <html lang="en">
            <head>
                <meta charset="utf-8">
                <title>iPhone Test</title>
                <style type="text/css">
                #iphone { 
                    background:url(iPhone.png) no-repeat; 
                    width:368px; height:706px; 
                    position:relative; 
                    overflow:hidden;  
                }
                #iphone iframe {
                    position:absolute; 
                    left:30px; 
                    top:143px; 
                    border:0;overflow:hidden; 
                }
                </style>
            </head>
            <body>
                <div id="iphone">
                <iframe src="<?=$url;?>" width="307" height="443"><p>Your Browser does not support iFrames.</p></iframe>
                </div>
            </body>
        </html>
        <?php
    }
?>

修改:感谢您的所有帮助。我做了一些研究,这是我到目前为止所做的:

<?php
include_once 'filter.php';
$filter = new InputFilter();   

if(isset($_GET['url'])) {
if (filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
    $url = $filter->process($_GET['url']);
?>

来源:http://www.example.com/iphone-test.php?url=http://www.example.com/mobile/

课程:http://oozman.com/php-tutorials/avoid-cross-site-scripting-attacks-in-php/

您怎么看?

6 个答案:

答案 0 :(得分:4)

您应该使用PHP的filter_var来检查它是否有效......

    if (isset($_GET['url'])) {
        if (filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
            $url = $_GET['url'];
        }
    }

答案 1 :(得分:3)

如果任何人都可以访问此页面,那么您可以自行开启XSS和Phishing重定向。例如,尝试将此添加到您的网址参数:

?url="></iframe><script>alert(123)</script>

在Firefox 6.02中触发警报。这意味着任何JS都可以被解雇并用于重定向认为他们正在访问您网站的用户。或者它可以用于窃取未标记为HTTPOnly的cookie。

这可以通过编码HTML属性来缓解。这是从OWASP中描述的:

除了字母数字字符外,使用&amp; #xHH转义ASCII值小于256的所有字符;格式(或命名实体,如果可用),以防止切换出属性。这条规则如此广泛的原因是开发人员经常将属性置于不引用状态。适当引用的属性只能使用相应的引用进行转义。不带引号的属性可以用许多字符来分解,包括[space]%* +, - /; &LT; =&gt; ^和|。

参考:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.232_-_Attribute_Escape_Before_Inserting_Untrusted_Data_into_HTML_Common_Attributes

现在,针对您的其他问题,上述内容将无法解决。如果您只允许输入任意URL,那么没有什么能阻止某人做这样的事情:

?url=http://myevilsite.com/redirect.php

让该页面重定向用户:

window.top.location.href = "http://www.site.com"; 

您唯一能做的就是使用可接受的URL白名单。

答案 2 :(得分:2)

The request method does not provide any securiy features, please see this answer

您需要100%确定您的代码不会使用javascript劫持该框架或将该人引导至恶意域,或者导致您的页面上的请求表单执行他们不想要的操作。< / p>

You can see some examples out here of that

<IFRAME SRC="javascript:alert('XSS');"></IFRAME>

<iframe src=http://ha.ckers.org/scriptlet.html"></IFRAME>

You could have the person lead to post something as well...

无论如何,我可以窃取你所有的cookies,或诱骗用户认为他们仍然在你的网站上,但我真的在我的网站上获取他们所有宝贵的信息。

停下来,在你继续前行之前,你需要知道自己在做什么,and you start by reading this

答案 3 :(得分:1)

您很容易受到cross site scripting的攻击。<​​/ p>

所有人必须做的是在网址中加入"></iframe><script>EEEEVVvvvillll!!!!,或使用非HTTP / HTTPS URI。

答案 4 :(得分:1)

以下是此处涉及的安全问题列表..

  

IFrames安全摘要

     

2007年10月24日星期三我决定收集各种证据   我已经完成的概念,并总结了为什么iframe存在安全风险。   以下是主要原因: -

     
      
  1. 浏览器跨域漏洞利用
  2.         

    说明: - 因为您可以在页面中嵌入其他网站,   您可以利用该页面并按该用户执行操作   所选网站上的任何内容。

         

    概念证明: - Safari beta 3.03零日

         
        
    1. XSS / CSRF反射攻击
    2.         

      说明: - 使用嵌入到受感染网站的iframe   然后攻击者可以将攻击反映到其他服务器上   攻击难以追踪并具有重点进行   攻击。

           

      概念证明: - 没有可用于这种类型的攻击   在没有实际进行攻击的情况下很难显示该方法。

           
          
      1. CSS和iframe可以从互联网上扫描您的局域网!
      2.         

        描述: - 利用CSS中的功能并使用iframe进行检查   如果存在默认IP地址,则可以获得您的网络   地址范围很容易提供网络设备使用   默认开箱即用的IP地址。

             

        概念证明: - CSS局域网扫描仪

             
            
        1. 使用Javascript和iframe进行局域网扫描
        2.         

          描述: - 使用与上面类似的方法可以获得   您的局域网信息使用Javascript。

               

          概念证明: - Javascript LAN扫描仪

               
              
          1. CSS iframe叠加
          2.         

            说明: - 在Firefox和Firefox中,iframe可以互相嵌入   您可以改变它们的外观,以创建任何无缝叠加   现场。这将使用户很难知道哪个站点   他们正在与他们互动并欺骗他们采取行动。

                 

            概念证明: - Verisign OpenID漏洞利用(现已修复)

                 
                
            1. 网址重定向
            2.         

              说明: - iframe还允许您执行重定向,以便您可以   可以访问通常无法访问的URL。在里面   美味的例子,POC从美味/家庭重定向到您的   帐户书签,然后使用CSS叠加显示您的第一个   书签。 POC需要Firefox和一个美味的帐户。

                   

              概念证明: - 美味的CSS覆盖/重定向

Original here

你可以通过像代理一样工作,在PHP中加载请求的URL,从HTML中删除所有内容(javascript等),然后在指向服务器上的网页的iframe中显示它,这样可以使它更安全

答案 5 :(得分:0)

只需使用strip_tags()即可废除任何邪恶的脚本条目:

$url = strip_tags($_GET['url'])