如何验证用户输入

时间:2013-03-08 11:33:51

标签: php security

我正在使用一个用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如果您发现任何其他安全风险,请告诉我..

2 个答案:

答案 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/