PHPソースのセキュリティをみていただきたい
自分で作ったソースをロリポ(PHPver5)にアップしていたのですが、管理者より脆弱性を指摘されました。
どこで脆弱な部分があるか見ていただきたいのですが・・・。
>>view.php
<?php
// アクセス制限
if(ereg("view.php", $_SERVER["PHP_SELF"]))
{
header("Location: index.php");
exit();
}
// 日付の取得
if(!$input_date)
{
$query = "SELECT max(modify) FROM " . DIARY_TABLE_LOG;
$result = @mysql_query($query, $db);
$num_rows = @mysql_num_rows($result);
// 記事があれば最新の日付をセット
if($num_rows == 1)
{
$input_date = @mysql_result($result, 0, 0);
if(!preg_match("/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/", $input_date))
{
$input_date = date("Y-m-d");
}
}
else
{
$input_date = date("Y-m-d");
}
}
// 記事の取得
$query = "SELECT * FROM " . DIARY_TABLE_LOG
. " WHERE modify = '{$input_date}'";
$result = @mysql_query($query, $db);
$num_rows = @mysql_num_rows($result);
// 一覧記事の取得
if($num_rows >= 1)
{
$row = @mysql_fetch_assoc($result);
$title = $row["title"];
$story = $row["story"];
// ナビゲーターの読み込み
include("navi.php");
//必要なファイルをインクルード
if(!$input_file)
{
$input_file = "main";
}
// 記事の表示
print <<<_EOT_
<div id="main">
<div id="right"><!-- 本文 -->
<h2> 最新記事 {$title} </h2>
<div class="tex">
{$story}
<p>$navi</p>
</div>
include("./html/" . $input_file . ".htm");
$query = "SELECT * FROM " . DIARY_TABLE_LOG
. " LIMIT 10";
$result = @mysql_query($query, $db);
for ( $i = 0 ; $i < 10 ; $i++)
{
$row = @mysql_fetch_assoc($result);
$c_title .= '<a href=index.php?date=' . $row["modify"] . '> '. $row["modify"] . ' - ' . $row["title"] . ' </a><BR>';
}
print <<<_EOT_
<h2>記事一覧</h2>
<div class="tex">
$c_title
</div>
</div><!-- right -->
<!-- left -->
<div id="uidform"><!-- サイドメニュー部分 -->
$uidform
</div>
<div id="menu"><!-- サイドメニュー部分 -->
$navibar
</div><!-- left -->
<br style="clear:both">
</div>
_EOT_;
}
else
{
// 記事がないとき
print <<<_EOT_
<div id="main">
<div id="right"><!-- 本文 -->
<h2> 最新投稿 {$title} </h2>
<div class="tex">
{$ms}
<p>$navi</p>
</div>
_EOT_;
$query = "SELECT * FROM " . DIARY_TABLE_LOG
. " LIMIT 10";
$result = @mysql_query($query, $db);
for ( $i = 0 ; $i < 10 ; $i++)
{
$row = @mysql_fetch_assoc($result);
$c_title .= '<a href=index.php?date=' . $row["modify"] . '>' . $row["modify"] . $row["title"] . ' </a><BR>';
}
print <<<_EOT_
<h2>記事一覧</h2>
<div class="tex">
$c_title
</div>
</div><!-- right -->
<!-- left -->
<div id="uidform"><!-- サイドメニュー部分 -->
$uidform
</div>
<div id="menu"><!-- サイドメニュー部分 -->
$navibar
</div>
<div id="calendar"><!-- サイドメニュー部分 -->
{$input_date}
$calendar
</div><!-- left -->
<br style="clear:both">\n
_EOT_;
}
?>
サーバの設定が正しくないと、ソースを抜き取られるようなので念のため載せておきます。
>>.htaccess
AddType application/x-httpd-php .php .html
AddHandler cgi-script .pl
Options FollowSymLinks ExecCGI Includes
DirectoryIndex index.php index.html index.htm index.shtml
以上です。
断片的な情報ですが、どこが弱いか、どうすれば直るか見て頂けたら幸いです。素人のため平易であればうれしいです。
事象としては、たまにページが表示されず、URLのみが表示されます。
複数人の同時アクセスによってファイルがこわれたせいだと思います。
その都度、ローカルPCにあるindex.phpをアップしなおし、ページを表示させていました。
お礼
回答ありがとうございます。 ミシュランの疑惑という観点から見ていたのでwikipediaはノーマークでした。 wikipediaのページを見て案外頻繁に改訂が行われているということに驚きました。 ミシュランの肩書きの重さが基準の足かせにもなるのですね。 これからも改訂は公正に行って欲しいです。 東京版に関しては、現時点で素晴らしいガイドブックとしては見れないかもしれませんが 追加調査によってより良いものになっていけるように思えました。