-2

PHPとJqueryで記述された、静的Webサイトをスクレイプできるスクリプトを使用しています。

<?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部分を保護する方法がわからないことです。私が理解しているように、入力値は、値を付けて送信できるため、セキュリティ上の大きなリスクです。私はすでにパフォーマンスが遅く、このコードで動作するいくつかの「PCクラッシュ」を経験しました。クラッシュが関連しているかどうかはわかりませんが、コードで作業しているときにのみ発生します。とにかく、サーバーに送信された(入力からの)値を検証する方法を本当に知りたいのですが、実際の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 に答える