在php中创建自己的音频验证码

时间:2013-01-08 01:01:37

标签: php captcha audioformat

我想在php中制作一个小的音频验证码,所以我需要将文本转换为语音,但我有两个限制:

首先它应该是一个php解决方案。创建一个mp3 / ogg就可以了,它可以插入并播放音频标签等。

其次我只需要使用ftp-access在服务器上安装它。所以,我不能使用php会说的标准应用程序。


所以,我已经研究了一些解决方案:

Jquery的Jtalk可以大声朗读文本,但这里有点不切实际,因为javascripts总是开源=>验证码在源代码中是明确的。

Google也有Api大声说话。但是,您需要调用extern文件,并将文本作为URL的一部分。因此,听取传出的请求也会使验证码显露出来。

我尝试使用php组合自己的音频文件。我在这里的一些帖子中读到,很多玩家只支持echo file_get_contents['audio1.ogg'].file_get_contents['audio2.ogg'];解决方案。但是,在Firefox中使用插件时,只播放第一个文件。在VLC中下载和播放会显示两个音频文件。我也不是很满意这个,即使它可以工作,因为人们可以将ogg源与字母相关联并通过切片音源代码来识别验证码...... 我还想过加载音频标签中的所有字母并根据需要播放它们,但这将再次揭示网络源代码中的验证码。

最后我听说过“flite”,它承诺可以做所有这些事情,但我觉得我有点误,它需要直接安装在服务器上,而不是只是在ftp上放几个文件。


那么,是否有人知道如何使用ftp-access制作文本到语音解决方案,而不与其他网站联系,并将文本作为网址的一部分?

此致 儒略

1 个答案:

答案 0 :(得分:0)

所以,我已经制作了一个结合了javascript和php的解决方案,这个解决方案很符合我的口味,并且可以进行修改以获得额外的安全性(比如添加噪音或者除了每个声音文件还有其他内容)。

它的工作方式如下:你设置一个声音文件夹,每个htaccess受保护,只允许一个captcha.php脚本来获取文件。每个字母都有一个要显示的文件。 该脚本还可以通过会话,数据库或受保护文件访问验证码,并具有指向当前读取位置的指针。每次访问时,它都会返回下一个字母的音频。这可以通过例如

echo file_get_contents('sounds/'.$_SESSION["curaudio"].'.ogg');

然后你只需要将音频元素插入你的html:

<audio hidden id="Sound_captcha">
    Your browser does not support the audio element.
</audio> 

并使用javascript切换到下一个字母。为此,请使用音频的src属性并提供captcha.php文件的地址。请记住添加一个值以防止缓存:

"captcha.php?"+(new Date()).getTime()

您可以调用audio-element的play() - 函数来播放文件。

要切换到下一个要求,要么保持每个文件的固定时间(非常不安全),要么使用音频元素的ended - 事件。​​

当然,你的php脚本最后也应该告诉我们何时完全读取验证码(例如,要用另一个需要ajax请求的脚本读取,或者例如产生声音的脚本只读取它在每个奇怪的访问,否则状态,或脚本在一开始告诉你需要多少重新加载......)

这实际上只适用于基本玩家,这也需要进行修改以防止轻松访问机器人...但是,在我看来,这至少与标准文本验证码一样安全,并删除了眼睛问题患者的巨大障碍。