1

GET値を受け取ったときにphpヘッダーを特定の場所に配置しようとしていますが、値が正しくない場合は、home.phpなどのデフォルトの場所に配置されます。

これが私がこれまでにしたことです

<?php
// Check which page is queried

if(isset($_GET['page'])){
    $got = $_GET['page'];
}
else {
    $got = 'home';
}

// Now goto that location

if(header('Location: '.$got.'.php')){
    header('Location: '.$got.'.php');
}
else {
    header('Location: home.php');
}
?>
4

6 に答える 6

4

おそらくfile_exists()関数を探しています。

あなたはこのようなことをするでしょう。

$got = 'home';
if(isset($_GET['page']))
{
  if(file_exists($_GET['page'].".php"))
  {
    $got = $_GET['page'];
  }

}

header('Location: '.$got.'.php');
exit;

編集 ユーザーに表示できるようにするページをホワイトリストに登録することをお勧めします。

$got = 'home';
$whitelist = array('contact', 'about', 'blog', ...); // could come from your database
if(isset($_GET['page']))
{
  if(file_exists($_GET['page'].".php") && in_array($_GET['page'], $whitelist))
  {
    $got = $_GET['page'];
  }

}

header('Location: '.$got.'.php');
exit;

これにより、許可したビューのみにアクセスできるようになります。

于 2012-06-11T11:01:29.440 に答える
1
if (file_exists( $got . '.php') {
  header('Location: '.$got.'.php');  
} else {
  header('Location: home.php');
}

ただし、そのようなコードはヘッダーインジェクションに対して脆弱であるため、使用可能なページのホワイトリストを作成することをお勧めします

于 2012-06-11T11:00:32.717 に答える
1

ファイルが存在するかどうかを確認します

if (file_exists($got . ".php") 
{
    header('Location: ...');
    exit;
}
else
{
    header('Location: ...');
    exit;
}

明らかに、以前にヘッダーが送信されていないことを確認する必要があります。

于 2012-06-11T11:02:29.987 に答える
0

たぶん、file_existsを使用する必要がありますか?

于 2012-06-11T11:00:59.943 に答える
0

これを試してみてください。ホワイトリストに登録したディレクトリ内のすべてのphpページを(動的に)検索し、それをgetリクエストと比較して、そのページがページディレクトリにあるかどうかを確認します。もしそうならそれはそれをロードし、そうでなければそれはあなたのhome.phpをロードします

$page = array();
$it = DirectoryIterator($dir);

foreach ($it as $page) {
    $pages[] = $page;
}

if (isset($_GET['page']) && in_array($_GET['page'], $pages)
    header("Location: " . $pages[$_GET] . ".php"); // or require_once $page . '.php';
else
    header("Location: home.php"); // or require_once "home.php";
于 2012-06-11T11:09:24.940 に答える
-1

curlを使用して、リクエストがHTTP200を返すかどうかを確認します

$http = curl_init($url);
// do your curl thing here
$result = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
if($http_status != 200)
{
    $url = "/home.php";
}
header('Location: '.$url);
于 2012-06-11T11:02:22.703 に答える