通过PHP请求特定音频文件的方式是否比这更少?

时间:2017-10-28 23:30:16

标签: javascript php html audio

我需要将php脚本输出中的音频文件放入HTML音频标记的源代码中。我无法指定哪些因为我无法添加POST变量所以我这样做是通过ajax调用设置SESSION“songRequested”然后请求文件并使用会话变量指定哪个文件是必要的。

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
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);

我不得不接受这个,因为当我在音频标签中调用php源时我无法传递post变量,而且我不知道如何在javascript中本地处理音频数据。

1 个答案:

答案 0 :(得分:0)

拉力赛对于post然后get请求没有任何安全性。两者都可以欺骗您的网站。如果你问我,最好的方法是不使用它们中的任何一个,而是使用URI段。 我应该提到这不再是安全的,然后发布或获取 URI的主要优点是你仍然可以使用get和post数据而不会混淆它。当你考虑它时,逻辑上它是你正在识别的资源,所以只使用一个URL / URL在那里有点意义。

URI是&#34; real&#34;之后的URL的一部分。资源位置。一个例子是

$('#source').attr("src","includes/songrequest.php/{songname}‌​");

{songname}是请求URI。这通常用于MVC框架,它通过主index.php管道所有内容。例如www.example.com/index.php/some_controller/some_method。通常用mod_rewrite(HTACCESS)重写URL来隐藏这个事实。

现在要访问这些数据,您可以在$_SERVER Super Global中查看,其中应该是$_SERVER['PATH_INFO'](我忘了我的头脑)。您可能需要修剪一些斜线或将其清理一下..

现在关于该数据的内容。我建议甚至不传递文件名,只是一个哈希或ID或歌名等。然后你用它来查找实际的路径。这将阻止您不想要使用的路径,因为路径来自内部数据源,该内部数据源由该部分&#34;#34;您传递的数据。

所以你会传递这样的东西(如果使用漂亮的哈希)

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

然后你在数据库中查找该值,获取URL并离开。

此外,我不认为这样做有什么本质上的错误

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

这里的关键是不传递实际路径,因为这可以被目录横向利用。其中,黑客提供的东西就像路径一样

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

基本上,它允许他们在文件系统上浏览并访问他们不应该访问的内容。但是通过使用查找,他们可以做的最糟糕的事情是查找已存储在数据库中的内容。

有道理。