我有这个非常简单的脚本,它允许用户指定任何站点的 url。该脚本替换对象标记上的“数据”属性的 url,以在 HTML 页面上的对象内显示用户选择的站点。
我如何验证输入,以便用户无法在对象内从我的站点加载任何页面,因为我注意到它将显示我的代码。
编码:
<?php
$url = 'http://www.google.com';
if (array_key_exists('_check', $_POST)) {
$url = $_POST['url'];
}
//gets the title from the selected page
$file = @ fopen(($url),"r") or die ("Can't read input stream");
$text = fread($file,16384);
if (preg_match('/<title>(.*?)<\/title>/is',$text,$found)) {
$title = $found[1];
} else {
$title = "Untitled Document";
}
?>
编辑:(更多细节)这并不意味着是一个代理。我让用户决定将哪个网站加载到对象标签中(类似于 iframe)。php 唯一要读取的是输入 url 中的标题标签,因此可以将其加载到我网站的标题中。(不要担心它不会欺骗用户)虽然它可以显示任何网站的标题,但它不会以任何其他方式绕过任何过滤器。
我也知道我正在做的事情涉及的漏洞,这就是我研究验证的原因。