-2

我正在使用一个用 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 部分。据我了解,输入值是一个很大的安全风险,因为任何东西都可以带值发送。使用此代码时,我已经经历过性能缓慢和几次“电脑崩溃”。我不确定崩溃是否相关,但它们仅在我处理代码时发生。无论如何,我真的很想知道如何验证发送到我的服务器的值(来自输入),只有真正的 url 应该大声。我用谷歌搜索了好几天,但我无法弄清楚(PHP 的新功能)

ps 如果您发现任何其他安全风险,请告诉我..

4

2 回答 2

1

我认为您的主要安全问题是您fopen用于读取 url 的内容,如果用户想要读取系统中的文件,那么他必须发送该文件的路径并且脚本是否具有足够的权限,然后他们将能够访问您的硬盘驱动器的内容。

我建议使用其他方法,例如Curl,或者至少验证用户输入以确保它是有效的 url,为此,我会检查一些正则表达式

祝你的代码好运!

编辑验证

这是我所说的验证的一个小例子。

<?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
}
?>

但是,如果您太新而无法理解这一点,我建议您使用更简单的示例,因为这是非常基本的逻辑。

于 2013-03-08T11:39:04.230 回答
0

令人难过的是,您在互联网上找不到有关此主题的任何信息。它是一件常见的事情。请参考以下链接。它可能会有所帮助。

PHP验证输入字母数字加上几个符号

http://phpmaster.com/input-validation-using-filter-functions/

于 2013-03-08T11:40:51.207 回答