通过网址防止iframe注入?

时间:2012-09-12 15:37:26

标签: php security url iframe code-injection

我正在尝试阻止可以分发网址的攻击,该网址使用网址中的javascript将iframe(包含虚假登录屏幕)插入PHP网站。在加载页面之前,PHP是否有某种方法可以清除页面的URL?

网址类似于:login.php?login_nav_map=%2Fv3%2Farchives%2Findex.php%22/%3E%3Cimg%20src=%22no.jpg%22%20onerror=%22document.write%28String.fromCharCode%2860,99,101,110,116,101,114,62,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,119,111,114,108,100,116,118,112,99,46,99,111,109,47,98,108,111,45,99,111,110,116,101,110,116,47,117,112,108,111,97,100,115,47,50,48,49,49,47,48,56,47,97,98,99,45,111,110,108,105,110,101,45,116,118,46,106,112,103,34,47,62,60,98,114,47,62,10,60,104,49,62,65,100,

并且char代码将iframe插入到我不想要的页面中。

1 个答案:

答案 0 :(得分:2)

你的问题真的很混乱所以我会尝试回答几个问题,希望它有所帮助。

您有一个不希望人们在iframe中加载的网页。

使用帧分组脚本,通常类似于

if (top.location != location) {
    top.location.href = document.location.href ;
}

您有一个网页,供人们发帖,您不希望有人输入iframe代码并在页面上加载框架。

清理输入。看看htmlentities。这会将<>(以及其他)转换为HTML实体,因此所有内容都会在页面上显示,但浏览器不会将任何代码解析为代码。不再是<script>,它只会显示为而不是执行内部代码。

您有一个网站,其中的网址参数代表了某些内容,您不希望有人将恶意网址作为参数。类似于http://mysite.com?foo=bar&url=somebadwebsite.com/virus.php

您应该有一个要阻止的网址或域名黑名单。查看parse_url以获取网址的各个部分,您可以使用in_array查看host是否属于黑名单数组。

您有一个网站,其中网址参数控制着网页的内容。类似http://mysite.com?foo=bar&title=Hello之类的内容,页面上显示“Hello”。你不希望有人在那里注入JS和你的页面来执行它。

这样做通常是个坏主意。在这种情况下,您应该有可能值的白名单。

$value = $_GET['title']
switch ($value) {
    case 'Hello':
        // do something for hello
        break;
    case 'Goodbye':
        // do something for goodbye
        break;
    default:
        // do something if it's something you don't expect/want as input
}
相关问题