我想用php做一个小的音频验证码,所以我需要将文本转换成语音,但我有两个限制:
首先,它应该是一个php解决方案。创建一个mp3/ogg将是很好的,它可以插入和播放音频标签等。
其次,我只需要使用ftp-access将其安装在服务器上。因此,我不能使用php可以使用的标准应用程序。
所以,我已经研究了一些解决方案:
Jquery的Jtalk可以朗读文本,但在这里有点不切实际,因为javascripts总是开源的=>,验证码在源代码中是很简单的。
谷歌也有一个可以大声说话的Api。但是,您需要调用外部文件,并将文本作为url的一部分。因此,监听传出请求也将揭示验证码。
我试着用php合并我自己的音频文件。我在这里的一些帖子中读到,许多播放器只支持echo file_get_contents['audio1.ogg'].file_get_contents['audio2.ogg'];解决方案。但是,使用Firefox中的插件,只播放第一个文件。下载并在VLC中播放会显示这两个音频文件。我对这个也不是很满意,即使它可以工作,因为人们可以将ogg-source与字母关联起来,并通过对音频源代码进行切片来识别验证码……我也想过加载音频标签中的所有字母,并根据需要播放它们,但这将再次揭示web源代码中的验证码。
最后,我听说了"flite“,它承诺可以做所有这些事情,但我想我弄错了,它需要直接安装在服务器上,而不仅仅是把几个文件放到ftp上。
那么,有没有人知道如何制作一个文本到语音的解决方案,只使用ftp访问,而不用文本作为url的一部分与其他网站联系?
向你致敬,朱利安
发布于 2013-04-25 08:39:26
因此,我提出了一个结合javascript和php的解决方案,这个方案符合我的口味,并且可以进行修改以增加安全性(比如增加噪音,或者在每个声音文件中添加一个字母以外的内容)。
它的工作原理是这样的:您设置了一个声音文件夹,通过htaccess保护,只允许captcha.php-script获取文件。每个字母都有一个要显示的文件。该脚本还可以通过会话、数据库或受保护文件访问验证码,并具有指向当前读取位置的指针。每次访问它时,它都会返回下一个字母的音频。这可以通过以下方式完成:
echo file_get_contents('sounds/'.$_SESSION["curaudio"].'.ogg');然后,您只需将audio-element插入到html中:
<audio hidden id="Sound_captcha">
Your browser does not support the audio element.
</audio> 并使用javascript切换到下一个字母。为此,使用音频的src-属性并提供captcha.php-file的地址。请记住添加一个值以防止缓存:
"captcha.php?"+(new Date()).getTime()
您可以调用音频元素的play()-function播放该文件。
要切换到next,需要在每个文件的固定时间量上停留(非常不安全),或者使用音频元素的ended-event。
当然,你的php脚本也应该在最后告诉你验证码什么时候已经读完了(例如,当你需要一个ajax请求的时候,你需要用另一个脚本来读取,或者,例如,产生声音的脚本只在每次奇怪的访问时做,否则状态,或者脚本一开始就告诉你需要重新加载多少次……)
这实际上是所有的基本球员,它也需要进行修改,以防止一个容易的机器人访问…然而,在我看来,这至少和标准的text-captcha一样安全,并为眼睛有问题的人消除了一个很大的障碍。
https://stackoverflow.com/questions/14206736
复制相似问题