我正在使用一个用PHP和Jquery编写的脚本,它允许抓取一个静态网站:
<?php
if(isset($_GET['site'])){
$f = fopen($_GET['site'], 'r');
$html = '';
while (!feof($f)) {
$html .= fread($f, 24000);
}
fclose($f);
echo $html;
}
?>
Jquery部分:
$(function(){
var site = $(input).val();
$.get('proxy.php', { site:site }, function(data){
$('#myDiv').append(data);
}, 'html');
});
正如您所看到的,需要抓取的网站必须是输入值。我想让我的访问者能够设置自己的网站进行搜索。
问题在于我无法弄清楚如何保护PHP部分。据我所知,输入值是一个很大的安全风险,因为任何东西都可以带来价值。我已经经历了慢速性能和使用此代码的几次“电脑崩溃”。我不确定崩溃是否相关,但只有在我处理代码时才会发生。 无论如何,我真的想知道如何验证发送到我的服务器的值(来自输入),只有真正的网址应该大声。我用谷歌搜索了几天,但我无法弄明白(PHP的新内容)
ps如果您发现任何其他安全风险,请告诉我..
答案 0 :(得分:1)
我认为您的主要安全问题是,您正在使用fopen
来读取网址的内容,如果用户想要读取系统中的文件,那么他必须将路径发送到文件,如果脚本有足够的权限,那么他们将能够访问您的硬盘驱动器的内容。
我建议使用其他方法,例如Curl或至少验证用户输入以确保它是有效的网址,为此,我会查看一些regular expressions
祝你的代码好运!
验证时修改
以下是验证意味着什么的一个小例子。
<?php
if(isset($_GET['site'])){
if(validURL($_GET['site']) {
$f = fopen($_GET['site'], 'r');
$html = '';
while (!feof($f)) {
$html .= fread($f, 24000);
}
fclose($f);
echo $html;
} else {
echo "Invalid URL, please enter a valid web url (i.e: http://www.google.com)";
}
}
function validURL($url){
//here goes your validation code, returns true if the url is valid
}
?>
但如果你太新了,不能理解这一点,我建议你选择更简单的例子,因为这是非常基本的逻辑。
答案 1 :(得分:0)
很难过,你在互联网上找不到关于这个主题的任何内容。这很常见。请参考以下链接。它可能会有所帮助。
PHP validate input alphanumeric plus a few symbols
http://phpmaster.com/input-validation-using-filter-functions/