PHP 将 GD 图像转换为用于验证码的 CSS 代码
Posted
技术标签:
【中文标题】PHP 将 GD 图像转换为用于验证码的 CSS 代码【英文标题】:PHP Convert GD Image to CSS Code for CAPTCHA 【发布时间】:2012-01-02 04:32:33 【问题描述】:为了生成机器难以破解的验证码,我计划将文本图像(仅限黑白)转换为 CSS 代码以显示给用户。
所以这个问题有两个方面:
-
让机器难以读取验证码是个好主意吗?
如果是这样,将 GD 图像转换为 CSS 的最佳方法是什么?
我打算遍历图像中的所有像素,检查它们是否为黑色,如果是,则将像素写入 CSS。但是我不知道如何在 CSS 中编写黑色像素(我的 CSS 技能欠缺。)所以对于我的第二个问题,我想知道如何在 CSS 中编写黑色像素。除非有人对生成 CSS 代码有更好的想法,或者是否已经存在可以执行此操作的工具。
请注意,我正在构建自己的 CAPTCHA 系统,因为我将使用输入的输入将文本图像转换为文本(就像使用 ReCAPTCHA 系统所做的那样),除了我自己的目的。所以我必须自己构建验证码系统。
【问题讨论】:
为什么你认为这会有所帮助?将 html/css 渲染回可以提供给验证码破解工具的图像是微不足道的。最多只会惹恼使用旧浏览器的用户,他们错误地呈现您的 CSS,并添加了一个无用的“安全”措施,验证码破解者只会嘲笑。 我认为它可能会推迟更大比例的验证码破解者,因为它们可能不是用来处理 CSS 绘制的图像。但不知道是不是这样,所以才问这个问题。 这就是重点。将 css 转换回普通图像很容易,然后标准的 capthca 破解程序开始处理它。您所做的只是在流程中添加了一个额外的小步骤 好的,重点...我还是想搞点花样,只是和已经做过的不同,因为我不希望有人专门开发一个验证码破解工具我的网站。你有什么建议吗? 对图像进行 CSS 处理会非常臃肿。即使是简单的<span class="black"></span>
也会将您的 1 字节像素更改为 28 字节的文本。一个简单的 200x100 验证码图像大约为 10k 的 .gif 格式,您可以将其转换为 527kbytes 的 html 以及 .css 定义。巨大的膨胀。
【参考方案1】:
将图像转换为 CSS 完全没有想法。它只是增加了很多额外的开销并造成了巨大的 CSS 混乱,同时没有增加任何真正的价值。通过混淆的安全性很差 - 尤其是在这里。
此外 - 是什么让您认为 CAPTCHA 破解软件不会只截取您的 CSS 混乱的屏幕截图,瞧:您的 CAPTCHA 作为图像?不要这样做。
如果您只专注于使您的验证码文本变得复杂,那么您不会有任何问题。或者您也可以像大多数人一样使用reCAPTCHA。
【讨论】:
我宁愿专注于混淆破解者...因为这个系统只会在一个站点上使用,如果我做一些与其他人不同的事情,那么破解工具将无法适应它,看到因为它只有 1 个站点。 是的,直到其他一些网站也有同样的想法,然后破解工具突然适应了,你必须每隔几个月对你的验证码进行更多的混淆。【参考方案2】:你应该这样做:
// generate the image $img
function img2data($img) return "<img src=\"data:image/png;base64,".base64_encode($img)."\" />";
ob_start("img2data");
imagepng($img);
ob_end_flush();
这样会直接在HTML文件中输出图片数据,并且会在大部分浏览器(可能不是IE7)中显示出来。
【讨论】:
他不只是想将图像输出为base64,他想彻底摆脱img
标签,使用CSS绘制图像。
然后将 data
网址推入 CSS background-image: url(...)
我希望强制破解工具必须以他们不支持的方式渲染图像,而浏览器支持。这就是为什么我计划根本不使用图像,而是将其制作为 CSS 代码(假设验证码破解工具无法读取 CSS,对此我不确定。)
背景图像仍然是图像以上是关于PHP 将 GD 图像转换为用于验证码的 CSS 代码的主要内容,如果未能解决你的问题,请参考以下文章
将 GD 图像缩放器转换为具有双三次锐化器的等效 ImageMagick