2011-02-02 17 views
3

まずはPHPについて何も知らないと言い始めるので、私が得ることのできるすべての助けに感謝します。 だから私はクライアントのためにファイルをアップロードするgodaddyでホストされたウェブサイトを持っています。友人の助けを借りて、私はユーザー名とパスワードで簡単なログインシステムを作った。問題は、ユーザー名とパスワードを入力せずにWebサイトにアクセスすることはできませんが、ブラウザに完全なリンクを直接入力することによって.jpgなどのファイルにアクセスできることです。私は、ファイルがユーザーのWebページからアクセスされる唯一の方法であるようにしたい。また、私は、各ユーザーが自分のファイルにのみアクセスでき、他のユーザーにはアクセスできないようにしたい。だからここに私のコードがあり、ハッキングを避けるために追加の変更が必要な場合は、私は入力を非常に感謝します。入力されたユーザ名とパスワードに使用されているフォームのディレクトリへのhttpアクセスを拒否しますが、内部サーバへのアクセスを許可します

index.phpファイルコード:

<form name="form1" method="post" action="checklogin.php"> 
      <div class="lefts"> 
      <p>Login:</p> 
      <p>Password:</p> 
      </div> 

      <div> 
      <input name="myusername" type="text" id="myusername" /> 
      <input name="mypassword" type="password" id="mypassword" /> 
      </div> 

     <div><input type="image" name="Submit" id="submit" value="Login" src="images/submitOff.png" /></div> 
</form> 

checklogin.php:。(正しいユーザ名とパスワードを入力した場合、それはユーザ名のWebページに行く場合ではない、それは間違ったユーザー名またはパスワードのWebページに行く

<?php 
ob_start(); 
session_start(); 
$host="hostname"; // Host name 
$username="username"; // Mysql username 
$password="password"; // Mysql password 
$db_name="dbnamey"; // Database name 
$tbl_name="tablename"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT username FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

//returns false if no results returned 
$row = mysql_fetch_row($result); 
// If result matched $myusername and $mypassword, table row must be 1 row 

if($row){ 
// Register $myusername, $mypassword and redirect to file 
$_SESSION["myusername"] = $myusername; 
$_SESSION["mypassword"] = $mypassword; 
$myPage = $myusername.".php"; 
$_SESSION["myPage"] = $myPage; 

header("location:".$myPage); 
} 
else { 
header("location:index2.php"); 
} 

ob_end_flush(); 
?> 

username1.php:(ファイルが含まれていたユーザーのwebapge)

<? 
session_start(); 
if(
//!session_is_registered(myusername) 
    !isset($_SESSION["myusername"]) || 
    $_SESSION["myPage"] != basename($_SERVER['REQUEST_URI']) 
){ 
header("location:index.php"); 
} 
?> 

<html> 
//content that consist of links to the files 
<a href="ready/username1/file.png">Png 1</a> 
</html> 

答えて

4

このスクリプトのセキュリティは非常に悪いです。あなたはパスワードをハッシングしていません。 header()を使用すると、HTTP応答ヘッダーに要素を追加できます。 スクリプトが実行されます。、あなたは何かへのアクセスを禁止していません。 Furhter more mysql_real_escape_string()addslashes()以上は何でもします。両方をすることは、どちらかが何をしているのか分からないことを人々に伝えます。あなたは、ADODBまたはPDOライブラリでパラメータ化されたquiresの使用を開始する必要があります。

accesssに返信用

Order deny, allow 
Deny from all 
Allow from localhost 
+0

感謝を防ぐために.htaccessファイルを使用してください。私はPHPについて何も知らないので、その理由はとても悪いです。あなたはどうしているのだろうかと思うように書き直すことができると思いますか? –

+0

@thedark_masterあなたにコードを書くためにSOを頼むことはありません。 – rook

+0

私はディレクトリへのアクセスを防ぐためにhtaccessを使いました。このPHPダウンロードスクリプトが見つかりました:http://www.tutorialchip.com/php-download-file-script/ここで残っていることは、私は何も知らないと話しました:) –

関連する問題