0

我正在尝试防止可以分发 url 的攻击,该攻击使用 url 中的 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,

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

4

1 回答 1

2

您的问题确实令人困惑,因此我将尝试回答几个问题,希望对您有所帮助。

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

使用框架突破脚本,通常类似于

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

您有一个网页,人们可以在其中发布内容,并且您不希望有人输入 iframe 代码并在您的页面上加载框架。

清理输入。看看htmlentities。这将<>(除其他外)转换为它们的 HTML 实体,因此所有内容都将在页面上可见,但浏览器不会将任何标签解析为代码。没有更多<script>,它会显示为只是而不是执行里面的代码。

您有一个网站,其中 URL 参数在代码中具有某种含义,并且您不希望有人将恶意 URL 作为参数。就像是http://mysite.com?foo=bar&url=somebadwebsite.com/virus.php

您应该有一个要阻止的 URL 或域的黑名单。查看parse_url以获取 URL 的各个部分,您可以使用它in_array来查看它是否host是列入黑名单的数组的一部分。

您有一个网站,其中 URL 参数控制页面的内容。类似的东西http://mysite.com?foo=bar&title=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
}
于 2012-09-12T15:43:46.237 回答