0

ビデオをデータベースに保存しようとするたびにエラーが発生します。ビデオをフォルダーに保存し、id_no と video_name のみをデータベースから保存できるコードがここにあります。5 つのフィールドすべてをデータベースに保存します。 ..誰か私のコードを手伝ってくれませんか

 <?php session_start();?>
 <?php
 include("session/DBConnection.php");
 include("session/session.php");
 $error = "";
 ?>

 <?php
 $user = $_SESSION['log']['username'];
 $query = mysql_query("SELECT * FROM members WHERE username = '$user'") or                      die            (mysql_error()); 
        $display = mysql_fetch_array($query);   

if(isset($_POST['upload'])){ 
$mem_id = $display['member_id'];
$stat = "just uploaded a video.";
$date = date("m/d/Y");
$qry = "INSERT INTO updates SET member_id='$mem_id', status='$stat', date='$date'";
$result = mysql_query($qry);
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=video.php\">";
 }
}

?>

<?php

if(isset($_POST['video']) && $_FILES['userfile']['size'] > 0)
{

    $tmpName = $_FILES['userfile']['tmp_name'];
    $fp = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);

    if(!get_magic_quotes_gpc())
    {
        $fileName = addslashes($fileName);
    }

    else{

            move_uploaded_file($_FILES["userfile"]["tmp_name"],"video_uplaod/" . $_FILES["userfile"]["name"]);
            $user = $_SESSION['log']['username'];
            $today = strtotime(date("Y-m-d H:i:s"));
            $location="video_upload/" . $_FILES["userfile"]["name"];
            $video_name=$_POST['video_name'];


            $sql = "INSERT INTO tbl_video SET username='$user', video='$location', video_name='$image_name', date_created='$today'";


    echo "File $fileName uploaded";
}

header("video.php");
?>
4

1 に答える 1

1

あなたの INSERT ステートメントは間違っています。

INSERT INTO updates (member_id, status, date) VALUES('$mem_id','$stat','$date')

マイクがコメントしたように、正しいステートメントである必要があります。

ただし、コードには 3 つの大きな問題があります。

1) 非推奨の関数を使用しています。

真剣に、mysql_ 関数の使用をやめてください。これらの関数は非推奨であり、PHP でサポートされなくなりました。また、いつでもなくなる可能性があります。そうなると、コードが壊れて、大変なことになります。代わりに mysqli または PDO を使用してください。

2) あなたのコードは SQL インジェクションに対して脆弱です。

ユーザー入力をサニタイズしていませんaddslashes。クエリへの SQL インジェクションを防ぐのに十分ではありません。mysqli または PDO を使用すると、準備済みステートメントを使用できるため、コードは SQL インジェクションに対して脆弱ではなくなります (とにかくユーザー入力をサニタイズしてはならないという意味ではありません)。

3) あなたのコードは、ファイル アップロード攻撃に対して脆弱である可能性があります。

ユーザーを本当に信頼していますよね?

  • 動画ファイルをアップロードする代わりに、Web ディレクトリ全体をコピーした php ファイルをアップロードして圧縮し、電子メールに送信して、ソース コードを確認し、データベースの資格情報を確認できるようにします。 、そしてあなたのサーバーへのバックドアを開き、私が望むことは何でもしますか?
  • ファイルをアップロードするときは、元のファイル名を保持しないでください。ファイルを「そのまま」保存しないでください。そのファイルを処理し、ビデオ ファイルを処理していることを確認する必要があります。ファイル拡張子に依存しないでください。 「myfunnyvideo.avi.php」をアップロードでき、「.avi」が含まれているためファイル拡張子がパスし、php が含まれているため apache がそのファイルを実行するためです。
  • 攻撃者が推測できるフォルダーにファイルを保存しないでください。できるだけ目立たないようにしてください...ファイルがuploads/ video_uploads/ フォルダーにアップロードされたかどうかは明らかです。
  • ファイルのアップロード先として選択したフォルダーが何であれ、apache がそのフォルダー内でスクリプトを実行できないことを確認してください。そうしないと、悪意のあるユーザーがアップロード ディレクトリを推測した場合、必要な php スクリプトを実行する可能性があります。

編集

INSERT INTO updates SET member_id = ".$mem_id

は正しい構文ですが、信じられない人のための証拠を次に示します。

http://sqlfiddle.com/#!2/df90b8/2/0

于 2013-07-10T17:16:19.870 に答える