[转] 采访 CaptchaMvc 的创建者 Vyacheslav Volkov

InfoQ 采访了 CaptchaMvc 的创建者 Vyacheslav Volkov,与他一起探讨了CaptchaMvc项目以及他对验证码未来的看法。

InfoQ:是什么促使你创建自己的验证码类库?

那个时候我正开始使用MVC 3框架。因为需要在自己的项目中使用验证码,所以我开始寻找一个能够解决我的问题的解决方案。但是我能够找到的所有方案都仅能够在MVC 2上使用,有一些甚至根本无法使用。在搜索了这么多内容之后,我决定编写自己的验证码实现,因此也就出现了CaptchaMvc类库的第一个版本。这个版本非常简单,但是即使是这样,它也是受欢迎的。

InfoQ:CaptchaMvc和其他的验证码类库之间有什么不同?

CaptchaMvc是一个有弹性的、简单的解决方案,它能够解决你项目中所有与验证码相关的问题。你需要做的所有事情就是向你的项目中添加一个类库,添加之后验证码就准备就绪了。该项目拥有使用验证码所需要的所有内容:

  • 有两种类型的验证码,普通的和数学的
  • 支持在session或者cookie中存储验证码
  • 支持“智能验证码”
  • 能够很容易地扩展默认实现

该项目也在不断地演变,我会尽量支持所有人提出的需求。我认为这些就是区分它和其他项目的主要内容。

InfoQ:你能预见一下什么时候将不再需要验证码么?或者说可能不再有效?

我们都在梦想那个时候。针对机器人的保护将会一直需要,而验证码仅仅是实现这种保护的方式之一。有各种各样不需要验证码的技术。例如,一些开发者会创建一个“假的”输入域,同时让该域对用户隐藏,当一个机器人试图填充表单的时候,它很有可能会填写该域。

尽管如此,我们也很难说验证码能够有效地防止垃圾邮件,有许多服务允许绕过验证码。验证码仅能够增强你的网站对机器人的防护,但是并不能提供全面的保护。

InfoQ:你列出该项目支持ASP.NET MVC 3、4和5。这些版本之间真的有很多区别么?

这些版本之间几乎没有什么不同,仅仅是类库中使用了MVC 4中添加的 AllowAnonymousAttribute 属性。

InfoQ:如果你可以修改ASP.NET MVC插件/类库支持的任何内容,那么你会修改什么?

ASP.NET MVC是一个非常了不起的Web框架,我喜欢它所使用的架构解决方案。对于ASP.NET Web API有一个地方我不喜欢,那就是我们不能多次读取请求中的内容。我清楚为什么要这么设计,ASP.NET Web API中的内容体被看作是仅能够读取一次的单向流,但是有时候这样让人非常不方便。

我想要改变 WPF\Silverlight\XAML 中的很多内容,但是这个主题应该在另一个采访中讨论。

InfoQ:什么是“智能验证码”,它和正常的验证码之间有什么区别?

基本的想法是让验证码对用户更加友好,在最好的情况下用户永远不会看到验证码。有多种技术能够让验证码更加友好。例如,有一种技术称为“假输入域”。CaptchaMvc 支持多种技术能够区分用户和机器人。让我简短的介绍一下每一种技术:

  • 假的输入(类名—FakeInputIntelligencePolicy)——使用一个“假的”输入域,正如我前面所写的。
  • JavaScript(类名—JavaScriptIntelligencePolicy)——尝试着去检查用户是否启用了JavaScript,如果用户禁用了JavaScript那么用户必须输入一个验证码
  • 响应时间(类名—ResponseTimeIntelligencePolicy)——允许你设置一个时间,在该时间内验证码将被认为无效。假如一个机器人请求一个表单,填充它并提交…页面加载和提交之前的间隔时间可能会少于一秒——没有人能够做到这一点。
  • 多种方式的组合(类名—MultiIntelligencePolicy)——允许你将不同的策略联合到一起。

我想要给出一个允许你设置“智能验证码”的代码示例,下面是一个我在我的网站上使用的代码示例:

CaptchaUtils.CaptchaManager.IntelligencePolicy = new
MultiIntelligencePolicy(
new FakeInputIntelligencePolicy(),
new JavaScriptIntelligencePolicy(),
new ResponseTimeIntelligencePolicy(TimeSpan.FromSeconds(3)));

现在,我正编写一个将会支持ASP.NET Web API的新版本。到目前为止这就是我的所有计划,但是将来的事情可能会有所变化,我将会添加一些其他的内容。

查看英文原文Interview with Vyacheslav Volkov, Creator of CaptchaMvc

时间: 2024-10-10 13:59:38

[转] 采访 CaptchaMvc 的创建者 Vyacheslav Volkov的相关文章

JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编程作为自己职业生涯的起点.如何学好编程?如何成为优秀的程序员?如何规划好程序员这个职业?是许多年轻人关注的问题.在Infoworld最近做的一次调查中,邀请到了JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Spring Framework创建者Rod

软件工程第二次作业--师兄采访

我采访的是李权师兄,虽然之前也有人采访过他,问题都是同样的问题,不过我挖掘出了和其他同学不一样的信息. 问题:    师兄,当时你们做的项目是什么,有多少用户, 现在还有人用吗? 李权师兄: 当时我们的项目名是约跑APP,当时用户有8人.在用户的手机上测试通过,能让用户找到一起跑步的小伙伴.现在已经没有人用了. 追问:该app给用户提供了什么样的服务? 李权师兄:app能提供给用户认识新朋友的平台.通过app,用户可以约人一起跑步. 第二个问题:师兄这个项目能否给我们团队继续开发,源代码还有么?

10.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下-------------答题者:徐潇瑞

10.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下 - 当时的项目有多少用户,给用户多少价值? 现在还有人用吗? - 这个项目能否给我们团队继续开发,源代码/文档还有么? - 项目开发有什么经验和教训 - 对学好软件工程有什么建议 写成一个博客   #团队博客作业2 根据老师的作业要求,我们采访了以前本科认识的一个同学,他在读本科的时候出去实习,参与了一些项目.他参与了手机外卖app的开发,根据他的回答,当时用户有1

Java设计模式之创建者模式,分享热爱编程的程序人生

PS:今天的23中设计模式中的创建者方式,至此告一段落.我今天带来的技术分享为创建者模式以及原型模式.当然在Java中这两种方式很常见,只不过我们写的次数确实有点低而已,但是这不是我不学它的借口!!! 创建者模式 无构建者模式代码示例:需求创建一个摩托车对象 并且使其开始运行. 发动机代码构建: 发动机代码构键 车架代码实例: 车架代码实例 轮胎机代码示例: 轮胎机代码示 摩托车对象实体类: 摩托车对象实体类 测试类: 测试类 总结:摩托车对象时一个大对象:构建过程中可能需要很多其他对象的使用,

04.创建型————创建者模式

package Create.d.Builder; //业务接口 public interface Tax { void calcTax(); } package Create.d.Builder; //业务接口 public interface Salary { void calcSalary(); } package Create.d.Builder; //业务实现类 public class HeBeiTax implements Tax { @Override public void c

创建者模式Builder

创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 优点: 由于实现了构建和装配的解耦.不同的构建器,相同的装配也可以做成不同的对象,相同的构建器,不同的装配顺序也可以生产成不同的对象.也就是实现了构造算法和装配算法的解耦,实现了更好的复用. 应用场景: StringBuilder类的append方法. SQL中的PreparedStatement JDOM中,DomBuilder SAXBuilder 创建者模式

(创建型模式四)创建者模式

package com.eyugame.modle; /** * 创建者模式 * * @author JYC506 * */ /*导演者*/ public class Director { IBuilder myBuilder=new MyBuilder(); public PhoneProduct createMiPhone() { myBuilder.setNameAndType("小米", "note"); myBuilder.des("售价2300

一篇采访窥C#的未来

今天坐公交时用手机打开 .NET Blog 阅读这周的 The week in .NET ,在看 Virtual Panel: What's Next for .NET? 这篇采访报道时,被其中对 Richard Lander (Principal Program Manager Lead on the .NET Team at Microsoft) 的一段采访所吸引: InfoQ: How has the emergence of Roslyn helped the growth of the

现代软件工程_第一周练习_第9题_团队采访

我们对上一届一个学长进行了采访,由于不在本地,就进行了电话采访. 问:学长你们当时开发项目叫什么名称? 答:我们做的是一个团购业务的APP开发,叫做“团吗” 问:那咱们那个团队当时有多少人员? 答:刚开始的时候有6个人,一段时间后又加入了两个 问:你们开发的软件当时有多少用户,能给用户多少价值?那个APP现在还有人用吗? 答:当时由于力量比较小,找到的商家比较少,所以用户比较少,大约只有一百人左右吧.当时我们的设想就是能让用户在我们平台上能够很方便快捷的购买到自己的想要的业务,能提供比其他平台更