首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php中创建自己的音频验证码

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

Stack Overflow用户
提问于 2013-01-08 09:01:37
回答 1查看 2.3K关注 0票数 1

我想用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的一部分与其他网站联系?

向你致敬,朱利安

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 08:39:26

因此,我提出了一个结合javascript和php的解决方案,这个方案符合我的口味,并且可以进行修改以增加安全性(比如增加噪音,或者在每个声音文件中添加一个字母以外的内容)。

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

代码语言:javascript
复制
echo file_get_contents('sounds/'.$_SESSION["curaudio"].'.ogg');

然后,您只需将audio-element插入到html中:

代码语言:javascript
复制
<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一样安全,并为眼睛有问题的人消除了一个很大的障碍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14206736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档