1

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

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

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


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

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

谷歌也有一个可以大声说话的 Api。但是,您需要使用文本作为 url 的一部分来调用 extern 文件。因此,收听传出的请求也将揭示验证码。

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

最后我听说了“flite”,它承诺能够做所有这些事情,但我想我有点误会了,它需要直接安装在服务器上,而不是仅仅将几个文件放在 ftp 上。


那么,有没有人知道如何制作一个只有 ftp-access 的文本到语音解决方案,而不用将文本作为 url 的一部分联系其他网站?

问候,朱利安

4

1 回答 1

0

因此,我编写了一个结合了 javascript 和 php 的解决方案,这很符合我的口味,并且可以进行修改以提高安全性(例如添加噪音或每个声音文件包含一个字母以外的其他内容)。

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

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

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

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

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

这实际上是针对基本播放器的全部内容,还需要对其进行修改以防止机器人轻松访问……但是,在我看来,这至少与标准文本验证码一样安全,并且为眼睛有问题的人。

于 2013-04-25T00:39:26.120 回答