我正在尝试阻止可以分发网址的攻击,该网址使用网址中的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插入到我不想要的页面中。
答案 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
}