2017-10-28 3 views
-3

HTMLオーディオタグのソースに配置するPHPスクリプトの出力からオーディオファイルが必要です。 POST変数を追加できないように指定することはできません。そのためには、セッションの "songRequested"をajax呼び出しで設定し、ファイルを要求し、セッション変数を使用して必要なファイルを指定します。これよりもPHPを使って特定のオーディオファイルを要求する方法が少なくありませんか?

HTML

<audio id ="player"> 
    <source src="" id = "source"> 
</audio> 

JS

$.post('includes/songrequest.php',{'request':songName},function(){ 
$('#source').attr("src","includes/songrequest.php"); 
    player.load(); 
    player.play(); 
}); 
//Declare the session variable as the file you want and set the audio source to be the songrequest php below with the session variable as the file to be downloaded. 

PHP私はPHPのソースのために呼び出されたとき、私はポスト変数を渡すことができなかったとして、これを行っていた

<?php 
session_start(); 
if(!isset($_SESSION['u_uid'])){ 
    exit(); 
} 
if(isset($_POST['request'])){ 
    $_SESSION['request'] = $_POST['request']; 
    //If requesting with post variables, set the session variable to it. 
    exit(); 
} 
//Otherwise, retrieve the file set as the session variable 
$file = dirname(getcwd(),2)."\\users\\".$_SESSION['u_uid']."\\".$_SESSION[' 

header('Content-Type: audio/'.pathinfo($file,PATHINFO_EXTENSION)); 
header('Cache-Control: no-cache'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize($file)); 
header('Accept-Ranges: bytes'); 
readfile($file); 

オーディオタグと私はjavascriptでネイティブにオーディオデータを実際に処理する方法を知らない。

+0

これは、「POST変数を追加できないため」という意味で、あなたが現在行っていることのいくつかのコードも、あなたが何をしようとしているのかを見るのに役立ちます。 – ArtisticPhoenix

+0

@ArtisticPhoenixコードを追加し、自分自身を良く説明しました。申し訳ありません。 –

+0

ちょうどそのようなセッションに投稿権を設定すると、予期せぬ結果につながる可能性があります。あなたが本当にすべきではないセキュリティスタンスだけでなく、何が要求されているかわからないので、アプリケーションに安全を確実に入れるためにいくつかのフィルタを実行する必要があります。 – Chris

答えて

0

ラリーには、postについてはさらに安全性があり、getリクエストはありません。どちらもあなたのサイトになりすますことができます。あなたが私に尋ねるなら、どちらかを使うのではなく、代わりにURIセグメントを使うことです。 私はこれがもう安全ではないと言及する必要があります。 URIの主な利点は、取得とポストのデータを混乱させることなく使用できることです。論理的には、それはあなたが識別しているリソースなので、URL/URLだけを使用することで意味があります。

URIは、「実際の」リソースロケーションの後にあるURLの一部です。例は

ここで、{songname}は要求URIです。これは、メインのindex.phpを介してすべてをパイプするMVCフレームワークでよく使用されます。例えば、www.example.com/index.php/some_controller/some_method。多くの場合、これはURLをmod_rewrite(HTACCESS)で書き換えることによって隠されます。

$_SERVERスーパーグローバルでは、$_SERVER['PATH_INFO'](私は頭の上を忘れている)のようなものになるはずです。いくつかのスラッシュを取り除くか、少しきれいにしなければならないかもしれません。

このデータの内容については、今すぐです。私はファイル名、ハッシュまたはIDまたは曲名などを渡すことさえ提案しません。そして、それを使って実際のパスを調べます。これにより、通過するデータの「ピース」によって参照される内部データソースからのパスが必要になるため、不要なパスが使用されないようになります。

(かなりハッシュを使用している場合)ですから、このような何かを渡す

$('#source').attr("src","includes/songrequest.php/2Bzi0U8t"); 

次にあなたがDBにその値を検索、URLを取得し、あなたが行くオフ。

また、私はちょうどそれがディレクトリ横断によって悪用される可能性がありますので、ここで重要なのは、実際のパスを渡していないことです。この

$('#source').attr("src","includes/songrequest.php?song=2Bzi0U8t"); 

を行うと、本質的に何か問題があるとは思いません。これは、ハッカーがパス

song=../../../somefile_we_dont_want_a_hacker_accessing.txt 

として、このようなものを提供するところ基本的にそれは、彼らがアクセスすべきでないファイルシステムとアクセスものにナビゲートすることができますされています。しかし、彼らが最悪のことをするためのルックアップを使用することによって、あなたのDBにすでに格納されているものをルックアップすることができます。

意味があります。

+0

本当に助けてくれてありがとう!ありがとう! –

+0

もちろん、私は助けてうれしいです。 – ArtisticPhoenix

関連する問題