- 浏览: 2072172 次
- 性别:
- 来自: NYC
文章分类
- 全部博客 (628)
- Linux (53)
- RubyOnRails (294)
- HTML (8)
- 手册指南 (5)
- Mysql (14)
- PHP (3)
- Rails 汇总 (13)
- 读书 (22)
- plugin 插件介绍与应用 (12)
- Flex (2)
- Ruby技巧 (7)
- Gem包介绍 (1)
- javascript Jquery ext prototype (21)
- IT生活 (6)
- 小工具 (4)
- PHP 部署 drupal (1)
- javascript Jquery sort plugin 插件 (2)
- iphone siri ios (1)
- Ruby On Rails (106)
- 编程概念 (1)
- Unit Test (4)
- Ruby 1.9 (24)
- rake (1)
- Postgresql (6)
- ruby (5)
- respond_to? (1)
- method_missing (1)
- git (8)
- Rspec (1)
- ios (1)
- jquery (1)
- Sinatra (1)
最新评论
-
dadadada2x:
user模型里加上 protected def email ...
流行的权限管理 gem devise的定制 -
Sev7en_jun:
shrekting 写道var pattern = /^(0| ...
强悍的ip格式 正则表达式验证 -
jiasanshou:
好文章!!!
RPM包rpmbuild SPEC文件深度说明 -
寻得乐中乐:
link_to其实就是个a标签,使用css控制,添加一个参数: ...
Rails在link_to中加参数 -
aiafei0001:
完全看不懂,不知所然.能表达清楚一点?
"$ is not defined" 的问题怎么办
手头有个需要,是关于做防爬虫表单提交的验证码问题,
于是,搜集了相关的资料,发现老的资料比较多。基本都是07年
比如:http://babo.iteye.com/blog/72298
大部分的验证的办法,都是用Rmagick生成,这普通会有两个问题
1. Rmagick的内存问题
2. 每次验证都要生成
那么,现在的流行验证码解决方案怎么样了呢
于是,把自己东拼西凑的东西罗列一下:
方案1. 首选的解决方案是把这个服务交给云服务提供商,这是流行趋势。如同,我们把反馈交给invoice。 recaptcha就专业提高验证码,第一流行的验证码插件就是利用recaptcha的。
这样优势会很明显使用起来非常简单,而且专业的提供商,效果也不错
大致使用如下:
设置API Keys
也可以在environment.rb设置
View上加tag
recaptcha_tags
支持如下参数
controller中验证如下:
方案2: 先随机生成需要的验证码图片,用的时候直接验证
这样就解决了Rmagick的内存问题,而且,用户验证很快不用当时再生成图片。
使用如下:
依照如下安装Rmagick
http://rmagick.rubyforge.org/install-faq.html
ubuntu如下:
在linux下生成图片需要图片处理软件ImageMagick的Ruby语言RMagick库支持。安装RMagick最麻烦,我查了N多资料试了N次才安装成功。
1. 安装ImageMagick:sudo apt-get install imagemagick
2. 查看安装结果:dpkg -l | grep magick
3. 更新软件包列表:sudo apt-get update
4. 安装图片处理软件包libmagick9-dev:sudo apt-get install libmagick9-dev ruby1.8-dev
5. 安装接口软件包RMagick:sudo gem install rmagick
6. 说明:如果出现问题或者错误请执行下面命令:sudo apt-get remove --purge libmagick9-dev
在irb里require 'RMagick'。如果返回true,表示安装成功。
安装插件
修改environment.rb
生成图片:
项目根目录,命令行执行
可以带如下参数:
View显示:
验证码显示
如果想更改验证码显示的样式可以参照captcha_helper.rb
Controller中验证如下:
其中的生成图片完全可以使用minimagick
方案3. 不使用图片生成的验证方式
Controller中添加回调
对应的执行方法如下:
验证逻辑部分
View显示和表单如下:
最后,单独就验证码的样式而言,完全可以使用minimagick或者,按照如下,改的更漂亮
詐尸
于是,搜集了相关的资料,发现老的资料比较多。基本都是07年
比如:http://babo.iteye.com/blog/72298
大部分的验证的办法,都是用Rmagick生成,这普通会有两个问题
1. Rmagick的内存问题
2. 每次验证都要生成
那么,现在的流行验证码解决方案怎么样了呢
于是,把自己东拼西凑的东西罗列一下:
方案1. 首选的解决方案是把这个服务交给云服务提供商,这是流行趋势。如同,我们把反馈交给invoice。 recaptcha就专业提高验证码,第一流行的验证码插件就是利用recaptcha的。
这样优势会很明显使用起来非常简单,而且专业的提供商,效果也不错
大致使用如下:
script/plugin install git://github.com/ambethia/recaptcha.git
设置API Keys
recaptcha_tags :public_key => '6Lc6BAAAAAAAAChqRbQZcn_yyyyyyyyyyyyyyyyy' verify_recaptcha :private_key => '6Lc6BAAAAAAAAKN3DRm6VA_xxxxxxxxxxxxxxxxx'
也可以在environment.rb设置
ENV['RECAPTCHA_PUBLIC_KEY'] = '6Lc6BAAAAAAAAChqRbQZcn_yyyyyyyyyyyyyyyyy' ENV['RECAPTCHA_PRIVATE_KEY'] = '6Lc6BAAAAAAAAKN3DRm6VA_xxxxxxxxxxxxxxxxx'
View上加tag
recaptcha_tags
支持如下参数
引用
:ssl: Uses secure http for captcha widget (default false)
:noscript: Include <noscript> content (default true)
:display: Takes a hash containing the theme and tabindex options per the API. (default nil)
:ajax: Render the dynamic AJAX captcha per the API. (default false)
:public_key: Your public API key, takes precedence over the ENV variable (default nil)
:error: Override the error code returned from the reCAPTCHA API (default nil)
:noscript: Include <noscript> content (default true)
:display: Takes a hash containing the theme and tabindex options per the API. (default nil)
:ajax: Render the dynamic AJAX captcha per the API. (default false)
:public_key: Your public API key, takes precedence over the ENV variable (default nil)
:error: Override the error code returned from the reCAPTCHA API (default nil)
controller中验证如下:
respond_to do |format| if verify_recaptcha(:model => @post, :message => "Oh! It's error with reCAPTCHA!") && @post.save # ... else # ... end end
方案2: 先随机生成需要的验证码图片,用的时候直接验证
这样就解决了Rmagick的内存问题,而且,用户验证很快不用当时再生成图片。
使用如下:
依照如下安装Rmagick
http://rmagick.rubyforge.org/install-faq.html
ubuntu如下:
引用
在linux下生成图片需要图片处理软件ImageMagick的Ruby语言RMagick库支持。安装RMagick最麻烦,我查了N多资料试了N次才安装成功。
1. 安装ImageMagick:sudo apt-get install imagemagick
2. 查看安装结果:dpkg -l | grep magick
3. 更新软件包列表:sudo apt-get update
4. 安装图片处理软件包libmagick9-dev:sudo apt-get install libmagick9-dev ruby1.8-dev
5. 安装接口软件包RMagick:sudo gem install rmagick
6. 说明:如果出现问题或者错误请执行下面命令:sudo apt-get remove --purge libmagick9-dev
在irb里require 'RMagick'。如果返回true,表示安装成功。
安装插件
script/plugin install git@github.com:zendesk/captcha.git
修改environment.rb
#environment.rb CAPTCHA_SALT = 'Something really random here'
生成图片:
项目根目录,命令行执行
rake captcha:generate COUNT=250
可以带如下参数:
引用
COUNT - the number of images to generate, default 3
IMAGE_HEIGHT - the height of the captcha image in pixels, default 50
IMAGE_WIDTH - the width of the captcha image in pixels, default 260
CAPTCHA_LENGTH - the number of characters in the captcha, default 5
FILE_FORMAT - the file type of the captcha image (png or gif)
IMAGE_HEIGHT - the height of the captcha image in pixels, default 50
IMAGE_WIDTH - the width of the captcha image in pixels, default 260
CAPTCHA_LENGTH - the number of characters in the captcha, default 5
FILE_FORMAT - the file type of the captcha image (png or gif)
View显示:
验证码显示
<%= captcha_block %>
如果想更改验证码显示的样式可以参照captcha_helper.rb
Controller中验证如下:
PostController < ApplicationController validates_captcha def create ... if captcha_validated? ... else ... end end end
其中的生成图片完全可以使用minimagick
方案3. 不使用图片生成的验证方式
script/plugin install http://code.subwindow.com/negative_captcha
Controller中添加回调
before_filter :setup_negative_captcha, :only => [:new, :create]
对应的执行方法如下:
private def setup_negative_captcha @captcha = NegativeCaptcha.new( :secret => NEGATIVE_CAPTCHA_SECRET, #A secret key entered in environment.rb. 'rake secret' will give you a good one. :spinner => request.remote_ip, :fields => [:name, :email, :body], #Whatever fields are in your form :params => params) end
验证逻辑部分
def create @comment = Comment.new(@captcha.values) #Decrypted params if @captcha.valid? && @comment.save redirect_to @comment else flash[:notice] = @captcha.error if @captcha.error render :action => 'new' end end
View显示和表单如下:
<% form_tag comments_path do -%> <%= negative_captcha(@captcha) %> <ul class="contact_us"> <li> <label>Name:</label> <%= negative_text_field_tag @captcha, :name %> </li> <li> <label>Email:</label> <%= negative_text_field_tag @captcha, :email %> </li> <li> <label>Your Comment:</label> <%= negative_text_area_tag @captcha, :body %> </li> <li> <%= submit_tag %> </li> </ul> <% end -%>
最后,单独就验证码的样式而言,完全可以使用minimagick或者,按照如下,改的更漂亮
require 'rubygems' require 'RMagick' class ProofImage include Magick attr_reader :text, :image Jiggle = 15 Wobble = 15 def initialize(len=4) chars = ('a'..'z').to_a # + ('0'..'9').to_a text_array=[] 1.upto(len) {text_array << chars[rand(chars.length)]} #background_type = "granite:" #花岗岩 #background_type = "netscape:" #彩条 #background_type = "xc:#EDF7E7" #指定背景色,例:xc:red #background_type = "null:" #纯黑 granite = Magick::ImageList.new('null:') canvas = Magick::ImageList.new canvas.new_image(32*len, 50, Magick::TextureFill.new(granite)) gc = Magick::Draw.new gc.font_family = 'times' gc.pointsize = 40 cur = 10 text_array.each{|c| rand(10) > 5 ? rot=rand(Wobble):rot= -rand(Wobble) rand(10) > 5 ? weight = NormalWeight : weight = BoldWeight gc.annotate(canvas,0,0,cur,30+rand(Jiggle),c){ self.rotation=rot self.font_weight = weight self.fill = 'green' } cur += 30 } @text = text_array.to_s @image = canvas.to_blob{ self.format="GIF" } #生成图片文件 #text.text(0, 0, " ") #text.draw(canvas) #canvas.write('test.gif') #图片位于项目根目录下。也可以使用linux中的绝对路径如:/home/chengang/test.gif end end
评论
5 楼
fireDragonpzy
2012-03-01
uninitialized constant ApplicationHelper::ReCaptcha
4 楼
wohaizai007
2011-03-24
第一种方案
View上加tag
recaptcha_tags
怎么写啊?
View上加tag
recaptcha_tags
怎么写啊?
3 楼
luoping0425
2010-12-30
用了关于rmagick的一段,参考一下,有关系么?
http://luoping0425.iteye.com/admin/blogs/855641
http://luoping0425.iteye.com/admin/blogs/855641
2 楼
fireflyman
2010-08-30
Hooopo 写道
貌似minimagic不能生成图片…
詐尸
1 楼
Hooopo
2010-08-30
貌似minimagic不能生成图片…
发表评论
-
Destroying a Postgres DB on Heroku
2013-04-24 10:58 927heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3255reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3287alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1470问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1379这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1344以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1903首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2272这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2262开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1234class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8138TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2018刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
说说sharding
2011-11-13 00:53 1480这个东西一面试就有人 ... -
rails面试碎碎念
2011-11-12 23:51 1939面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17209git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2731简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 945第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1691开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12951Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2115又是这个date format的错误。 上次出错忘了,记录下 ...
相关推荐
总的来说,`Package captcha`是Macaron框架的一个强大补充,它为开发者提供了简单易用的验证码解决方案,使得Web应用的安全性得到了保障,同时减少了开发过程中的复杂性。通过深入学习和实践,你可以更好地利用这个...
在Ruby on Rails框架中,构建用户登录和注册功能是Web应用程序开发中的常见任务。...此外,还可以使用Devise这样的成熟认证解决方案,它提供了更多的功能和灵活性,但基础理解是实现这些功能的关键。
针对Rails应用的简单灵活的垃圾邮件防护解决方案。 Invisible Captcha提供了多种技术来保护您的应用程序免受垃圾邮件攻击。 主要保护是基于honeypot原理的解决方案,该解决方案提供了更好的用户体验,因为对于...
带有Warden的Rails的灵活身份验证解决方案。 一种用于设计的企业安全性扩展,试图满足Web应用程序的工业标准安全性需求。 -Ruby on Rails的授权Gem。 通过OO设计和纯Ruby类进行的最小授权 一个插件,可以使在...
ActsAsTextcaptcha通过基于文本的逻辑问题验证码为Rails模型提供垃圾邮件保护。 问题来自 。 它们很容易被人类解决,但机器人很难破解。 您还可以根据自己的问题配置gem。 作为替代方案,也可以作为处理任何API...
invisible_captcha, 针对RoR应用的Unobtrusive和灵活的垃圾邮件保护 不可见的验证码 Rails 应用程序的简单和灵活的垃圾邮件保护解决方案。不可见的Captcha提供了不同的技术来保护你的应用程序免受垃圾干扰。主保护是...
在实际操作中,开发者可能还使用了 Bootstrap 或其他 CSS 框架来快速构建响应式布局,以及 Devise 或其他认证解决方案来处理用户注册、登录和授权。通过分析项目源码,我们可以深入理解 Ruby on Rails 如何与 ...
这些框架提供了一套完整的解决方案,包括组件化开发、状态管理、路由等,使得大型Web应用的构建更加高效。 6. 后端开发:后端技术涉及服务器端编程,处理业务逻辑、数据存储和交互。常见的后端框架有Node.js(使用...
总的来说,“蓝色大气的公司后台登录页面”HTML模板是前端开发的一个实用工具,它为建站公司提供了快速构建专业后台登录界面的解决方案,减少了从零开始设计的时间成本,同时保证了界面的高质量和用户体验。...
Devise是一个灵活的身份认证解决方案,适用于Ruby on Rails应用。它为开发者提供了许多内置功能,如密码重置、电子邮件验证和会话管理等。"sms_confirmable"模块则是对Devise的一个扩展,增加了短信验证功能,让用户...
"个人社区模板"是一个专为创建互动性强、用户参与度高的在线社区而设计的软件解决方案。这个模板提供了发布问题、解答问题以及各种社区互动功能,旨在帮助用户建立一个集知识分享、互助交流于一体的网络平台。下面...
总的来说,Nbs博客系统 v1.0是一个全面的博客解决方案,它涵盖了博客系统开发中的许多关键要素,旨在为用户提供一个功能强大、易用且可定制的在线写作和交流平台。通过深入学习和利用这些功能,用户可以创建出专业且...
8. **云计算**:为了降低成本和扩展性,"第三波书店"可能会选择在云端部署,如Amazon AWS、Microsoft Azure或阿里云等平台,利用云服务提供的弹性计算、存储和数据库解决方案。 9. **性能优化**:随着业务增长,...
通过以上内容可以看出,Spring Security 2提供了一套全面而强大的安全解决方案,旨在帮助开发者轻松地为Java应用程序实施各种安全措施。无论是Web应用还是非Web应用,Spring Security都能提供相应的支持,确保应用...
它包括了解析HTML、处理JavaScript、模拟浏览器行为、代理服务器、验证码解决方案以及数据清洗等多个方面的工具。这些工具可以帮助开发者绕过反爬策略,实现自动化数据抓取,并对抓取到的数据进行有效处理和分析。 ...
总之,hotauth通过hotwire技术和Perl脚本hotauth.pl,为开发者提供了一个强大且灵活的身份验证解决方案。它不仅关注用户体验,更注重安全性,是开源软件社区的一个宝贵贡献。对于那些寻求高效身份验证机制的开发者来...
在维护个人博客或者小型网站时,垃圾留言(Spam)是一个常见的问题,它们会污染网站内容,影响用户体验。...对于那些没有现成插件可用或希望自定义解决方案的开发者来说,这是一个值得尝试的方法。
Spree Commerce是一个开源的电子商务平台,它为在线商家提供了一个灵活且可扩展的解决方案来创建和管理他们的在线商店。在电子商务领域,3D Secure是一种重要的安全机制,旨在增强信用卡在线交易的安全性。3D Secure...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...
JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...