ファイルがアップロードされたときに、クライアントが提供する名前を使用してファイルを保存する場合は、潜在的に画像を上書きします(例:2人のユーザーがme.pngをアップロードする場合) - へのユーザー名を使用するより良いだろう画像を保存して、あなたも私たちがセッションからユーザー名を使用し、その空白でないを確認し、このコードでは
<?php
session_start();
$username = $_SESSION['user'];
if(empty($username)){
echo "Error: no username found";
}
else if(isset($_FILES['file'])){
//create a path to move file to
$newpath = 'files/'.$username;
if (move_uploaded_file($_FILES['file']['tmp_name'], $newpath)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Error: Possible file upload attack!\n";
}
}
else{
echo "No Files to save";
}
...自分の写真にユーザーを接続するためにMySQLのテーブルを必要としません。 これを使って画像をファイルフォルダに保存します。
ファイルは、ファイル・ディレクトリの外に保存される原因となるユーザー名で../
含める:
注これは、セキュリティ上の問題の数を無視します。 ユーザー名を既に検証している場合は問題ありません。もう1つの解決策は、ユーザー名のハッシュを作成し、代わりにこの方法を使用することです。$newpath = 'files/'.md5($username);
エラーを確認しないか、
http://php.net/manual/en/features.file-upload.errors.php
PHP image upload security check list
どのようにこれらの画像は、この後に使用するつもりですか? filesディレクトリがhtdocs内にある場合、内容はすべて利用可能になります。htdocsの外に格納するほうが良いでしょう。例えば、 。 $newpath = '/var/myappdata/userimages/'.md5($username);
あなたは、ファイルを読み込んで、別のファイルuserimage.php作成することができます。これは、あなたが、例えば、追加のチェックを行うことができます
<?php
session_start();
$username = $_SESSION['user'];
$path = '/var/myappdata/userimages/'.md5($username);
readfile($path);
をユーザが画像を見ることを許可されていること。
ここではまだ説明できないほどの膨大な量がありますが、これは十分に前進してくれるはずですが、これを実動に移す前にファイルアップロードのセキュリティについて詳しくお読みください。
あなたの元の質問
あなたは、データベース内の画像に関する情報を保存したいなかった場合は、このような何か行うことができます:私は言ったように
<?php
session_start();
include ("connect.php");
$username = $_SESSION['user'];
if(empty($username)){
echo "Error: no username found";
}
else if(isset($_FILES['file'])){
//create a path to move file to
$filename = basename($_FILES['file']['name']);
$newpath = 'files/'.$filename;
if (move_uploaded_file($_FILES['file']['tmp_name'], $newpath)) {
echo "File is valid, and was successfully uploaded.\n";
$sql = $con->prepare('INSERT INTO users (username,userpic) VALUES (?,?)');
$sql->bind_param("ss",$username,$filename);
$sql->execute();
$sql->close();
$con->close();
} else {
echo "Error: Possible file upload attack!\n";
}
}
else{
echo "No Files to save";
}
を - 2場合は、競合に実行されますユーザーは同じファイルをアップロードします。
私は私の全体のSQLの質問を削除し、そのコードを書く必要がありますか?それは私のために動作しませんでしたtho –
私は私の答えを更新しました – Theo
説明のためのThnaksたくさん私は画像をアップロードするときに自分自身を守る方法をもっと見ていきます.. –