一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

【探索】自动报警的验证码

前言

最近 12306 换了套新验证码,又一次引发吐槽。

虽然图片组合的方式仍有不少争议,但无论如何能尝试突破传统,都是值得称赞的。

毕竟传统的验证码已饱受诟病了。为了对抗少数恶意用户,却降低了绝大部分正常人的用户体验。

每当无聊时,就会遐想各种验证码的方案,今天分享一个比较有趣的。

自动报警的密码

曾有传言,在 ATM 机上密码倒着输会自动报警。且不论真实性,就这想法还是有点意思的。

  • 首先,也是最重要的,输入了这个反密码仍能取钱,这满足了劫匪的目的。但同时已悄悄的报警,想必也逃不远了。
  • 其次,这无需引入一个额外的报警密码。多一个就会提升复杂度,增加记错的可能。
  • 最后,即使平时输错,那么正好输成这个报警码的概率也是很低的。(12321 这种回文暂不考虑)

于是密码除了可以用于验证外,还可以在真与假之间建立一个规则,用于隐写额外的信息。

这个特征,是否也可用于验证码呢。

自动报警的验证码

我们得设计一个圈套,让正常用户几乎不会落入,而假人一不小心就会掉进这个陷阱里。

通常情况下,破解验证码的程序都是直接抓取图片中的像素点,然后进行分析。而用户看到的,则是屏幕上最终显示出来的内容。

在绝大多数情况下,这两者都是相同的。但我们也可以让它变得不同,人为的制造一点麻烦出来。

例如,一个内容为 d6xm 的验证码:

这是个再普通不过的验证码,破解几乎毫无压力。不过,这次玩的不再是算法上的对抗了。

我们在页面中某个隐蔽的地方,偷偷插入一个 CSS 规则:

将图片进行 180° 的旋转。这时,呈现在用户眼前的就是这样一个东西了:

内容正好变成了 wx9p!

到底哪个是正确答案呢,就不用说了吧。既然我们考察的是用户,那当然就是眼见为实的了!

但通过抓图识别的假人看来,仍是原始的像素点,并不知道页面中还有这么个小把戏,于是一不小心就中招了。

即使用户偶尔会有输错,但如果能把 wx9p 拼成 d6xm,那也太巧合了,想必还是开挂的可能性比较大吧。

类似输入报警密码仍能取钱,我们也尽量保持这个陷阱足够低调。即使用户提交了 d6xm 也算通过,但后台会悄悄的记录下这一切。

当某个用户达到一定可疑程度时,就可以对其采取相应的措施了。将拦截处理进行延时,以避免过早的进入对抗。

题库模板

当然,上面只是举了个简单的例子。像旋转这样的规则,有着太多的局限。并非所有字符旋转后都有对应的,也不能出现回文字符串。

事实上,还可以尝试更为通用的方法。

前面提到 ATM 取款密码时,若能单独设置一个报警密码,其实也是很好的,只是要多记一条。但在验证码这里,用户是完全透明的,再复杂也是浏览器自动搞定的。

我们尝试在图片里写入两套字符串。一个非常明显,另个则像水印一样暗淡。

正常情况下,后者不仔细观察很难发现。但通过页面中的滤镜,会使两者正好相反:

于是在最终用户眼里,看见的反而是水印的版本。

除了这些,其实有无数多的变化方案。例如事先对图片进行扭曲,渲染时再还原回来,等等。

当然不论怎样,其本质都是一样的。相比传统的单一图像输出,如今还多一个变幻参数,并且位于图片之外的页面里。两者必须相结合,才能渲染出最终的图像。

对于普通的傻瓜式破解程序,这道门槛即可将其原形毕露。为了获得图片最终被应用上的样式,外挂不得不使用浏览器内核对页面进行渲染,取代传统直接抓接口的方式。

于是进入前端脚本对抗阶段。

对抗

对抗是没有标准答案的。如果要有,那就是成本最低的,才能坚持的更久。

传统的验证码出现十多年,已经积累了大量的破解经验,现成的工具和算法随处可得,图像识别进入低成本规模化。在这样形势下,还停留在纯粹的图像上,也难以大幅改进了。

但新增了一个渲染时的变量,情况就变得好转。我们可以使用前端加密混淆技术、以及各种黑魔法,进行对抗。

也许某个外挂在识图领域非常强,但对于页面脚本的了解并不深入。于是,我们就可使用另一个自己熟悉的领域,和传统进行对抗了。

当然,最完美的验证码,就是没有验证码,让页面脚本来进行自我检验。可以参考:《对抗假人 —— 前后端结合的 WAF》。在过去前端技术尚不发达的年代,这套系统无需验证码也能抵挡绝大多数的恶意提交和 cc 攻击。 在如今,比的就是更巧妙的方案了。

无论怎样,总是可以有更低成本的综合方案,来解决实际问题,而非吊死在一棵树上。

惩罚

外挂是永远不会消失的,而且只会越来越先进。我们不能阻止武器的制造者,但能惩罚滥用的人。

任何一个方案都会被破解,是无法长期对抗的。但可以在它的有效期内,尽可能多的揪出开挂用户,并作出惩罚。尤其是实名制的账号,逮到一个就少一个。

这种方案也未免每次都开启,而是时不时的进行抽查,让用户在使用外挂的具有一定的畏惧性,才是最终目标。

from:http://www.cnblogs.com/index-html/p/4357677.html

处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

今天安装了windows7 开发web项目需要安装IIS,当安装完以后,web程序已经映射到了本地IIS上,运行出现如下错误提示 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 原因: vs2010默认的是4.0框架,4.0的框架是独立的CLR,和2.0的不同,如果想运行4.0的网站,需要用aspnet_regiis注册4.0框架,然后用4.0的Class池,就可以运行4.0的web项目了. 如何用aspnet_regiis注册4.0框架 : 方法如下,启动cmd (win键+R 启动cmd)  ,找到 4.0所在的目录,本人机器目录是 ; 注意:要以管理员的身份运行DOS窗口。 复制上面的目录  C:\Windows\Microsoft.NET\Framework\v4.0.30319 启动CMD进入上面的目录,如下图 回车后 如下图 已经进入 C:\Windows\Microsoft.NET\Framework\v4.0.30319 此目录 然后运行  aspnet_regiis.exe -i  如下图 稍等一会,  aspnet_regiis 注册后如下图 ok,这时的IIS就可以运行 .net 4.0 部署的网站了. from:http://blog.163.com/wger_163_dh/blog/static/142646155201151394642791/

龙生   28 Mar 2015
View Details

php环境无法上传文件的解决方法

一、 检查网站目录的权限。 上传目录是否有写入权限。 二、 php.ini配置文件 php.ini中影响上传的有以下几处: file_uploads 是否开启 on 必须开启 是否允许HTTP文件上传 post_max_size = 8M PHP接受的POST数据最大长度。此设定也影响到文件上传。 要上传大文件,该值必须大于"upload_max_filesize" 如果配置脚本中激活了内存限制,"memory_limit"也会影响文件上传。 一般说来,"memory_limit"应该比"post_max_size"要大。 upload_max_filesize = 2M 允许上传的文件的最大尺寸 upload_tmp_dir = C:\windows\temp 文件上传时存放文件的临时目录。必须是PHP进程用户可写的目录。如果未指定则PHP使用系统默认值 default_socket_timeout = 60 socket超时,单位是秒 max_execution_time = 30 每个脚本最大允许执行时间, 按秒计。默认为30秒。 这个参数有助于阻止劣质脚本无休止的占用服务器资源。 注: "max_execution_time"仅影响脚本本身的运行时间。 任何其它花费在脚本运行之外的时间,如用system()/sleep()函数的使用、数据库查询、文件上传等都不包括在内。 在安全模式下,你不能用ini_set()在运行时改变这个设置 max_input_time = 60 每个脚本接收输入数据的最大允许时间(POST, GET, upload), 按秒计 memory_limit = 128M 设定一个脚本所能够申请到的最大内存字节数。 这有助于防止劣质脚本消耗完服务器上的所有内存。 要使用此指令必须在编译的时候激活。 因此 configure 一行中应该包括:--enable-memory-limit 如果不需要任何内存上的限制,必须将其设为 -1 自php4.3.2 起,当设置了memory_limit后,memory_get_usage()函数将变为可用 三、upload_tmp_dir目录权限 如果php配置没问题,那问题有可能出在upload_tmp_dir设定的目录权限问题。加入IIS_WPG除完全控制外的权限,users的读写权限,NETWORK SERVER除完全控制外的权限。 四、如果起用了ZEND,看Temp文件夹中是否有ZendOptimizer.MemoryBase@SYSTEM和ZendOptimizer.MemoryBase@NETWORKSERVICE,如果没有,就建立它。 五、如果以上都不行,那问题很有可能出在这里了,检查windows目录是否禁用guests来宾组,要给windows目录users组 读取和执行权限。 from:http://www.jb51.net/article/49557.htm

龙生   27 Mar 2015
View Details

VS2012创建MVC3项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”

  VS2012已经全面切换到使用NuGet这个第三方开源工具来管理项目包和引用模块了,使用VS2012开发,都要装NuGet插件(官网:http://nuget.org),进官网点安装就进入了微软的下载页面,选择vs2012版本的NuGet.Tools.vsix文件,双击安装就可以了。 from:http://www.cxyclub.cn/n/20504/

龙生   27 Mar 2015
View Details

C# Winform对文件夹的权限判断及处理

WindowsIdentity类可以获取当前执行者的身份信息         /// <summary> /// 递归搜索文件方法 /// </summary> /// <param name="path">搜索的目录</param> /// <param name="name">搜索的文件名</param> public void GetDir(string path,string name) { DirectoryInfo di = new DirectoryInfo(path); DirectorySecurity s = new DirectorySecurity(path, AccessControlSections.Access); //判断目录是否 可以访问 if (!s.AreAccessRulesProtected) { foreach (DirectoryInfo d in di.GetDirectories()) { foreach (FileInfo fi in di.GetFiles()) { if (fi.Name.Contains(name)) { txtInfo.AppendText("文件名:"+fi.Name + " 路径:" + fi.FullName + " \n"); } } GetDir(d.FullName, name); } } } }   对执行的程序设定执行身份权限 如果程序不是以管理员身份运行,操作本地文件会提示:System.UnauthorizedAccessException异常   Vista 和 Windows 7 操作系统为了加强安全,增加了 UAC(用户账户控制) 的机制,如果 UAC 被打开,用户即使是以管理员权限登录,其应用程序默认情况下也无法对系统目录,系统注册表等可能影响系统运行的设置进行写操作。这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC,但有时我们开发的应用程序又需要以 Administrator 的方式运行,即 Win7 中 […]

龙生   20 Mar 2015
View Details

C# WinForm判断Win7下程序是否以管理员身份运行

如果程序不是以管理员身份运行,操作本地文件会提示:System.UnauthorizedAccessException异常。   Vista 和 Windows 7 操作系统为了加强安全,增加了 UAC(用户账户控制) 的机制,如果 UAC 被打开,用户即使是以管理员权限登录,其应用程序默认情况下也无法对系统目录,系统注册表等可能影响系统运行的设置进行写操作。这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC,但有时我们开发的应用程序又需要以 Administrator 的方式运行,即 Win7 中 以 as administrator 方式运行,那么我们怎么来实现这样的功能呢?   我们在 win7 下运行一些安装程序时,会发现首先弹出一个对话框,让用户确认是否同意允许这个程序改变你的计算机配置,但我们编写的应用程序默认是不会弹出这个提示的,也无法以管理员权限运行。本文介绍了 C# 程序如何设置来提示用户以管理员权限运行。 首先在项目中增加一个 Application Manifest File app.manifest 默认的配置如下:   <?xml version="1.0" encoding="utf-8"?> <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- UAC Manifest Options If you want to change the Windows User Account Control level replace the requestedExecutionLevel node with one of the following.<requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> If you want to […]

龙生   20 Mar 2015
View Details

CMD中使用attrib命令设置文件只读、隐藏属性详解

本文介绍一个cmd下的一个attrib.exe的小程序,它可以用来设置文件的属性。我们知道文件的属性有只读、隐藏、系统、存档和无内容索引等5个,只读和隐藏用得比较多,另外三个用得比较少。 不知道大家有没有用过attrib.exe这个cmd下的小程序,它可以用来设置文件的属性。先来看看它的帮助文件。 复制代码代码如下: C:\Users\splaybow>help attrib 显示或更改文件属性。ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I] [drive:][path][filename] [/S [/D] [/L]] + 设置属性。 – 清除属性。 R 只读文件属性。 A 存档文件属性。 S 系统文件属性。 H 隐藏文件属性。 I 无内容索引文件属性。 [drive:][path][filename] 指定 attrib 要处理的文件。 /S 处理当前文件夹及其所有子文件夹中的匹配文件。 /D 也处理文件夹。 /L 处理符号链接和符号链接目标的属性。 我们用一个例子来看看如何使用attrib设置文件的属性。 第一步,先使用echo命令来创建一个文件:d:\2.txt 复制代码代码如下: C:\Users\splaybow>echo xxxx>d:\2.txt 创建文件成功后,将不会有任何提示。 第二步,为d:\2.txt文件添加一个隐藏属性和一个只读属性。 复制代码代码如下: C:\Users\splaybow>attrib +r +h d:\2.txt 设置文件属性成功后,也不会有任何提示。 第三步,显示d:\2.txt的文件属性。 复制代码代码如下: C:\Users\splaybow>attrib d:\2.txt A   HR       D:\2.txt 我们可以看到当前文件中存在存档(A)、隐藏(H)、R(只读)三种属性。这里大家可能想问,为什么会有存档(A)属性的存在呢?这个洪哥也解释不了,估计在使用echo创建文件时,文件就已经有存档(A)属性了。 第四步,我再来看看把存档、隐藏、只读、系统、无内容索引五个属性全部加上的效果。 复制代码代码如下: C:\Users\splaybow>attrib +a +s +r +i +h d:\2.txt 设置文件属性成功后,不会有任何提示。 第五步,查看一下最后的文件属性 复制代码代码如下: C:\Users\splaybow>attrib d:\2.txt A  SHR  I    […]

龙生   19 Mar 2015
View Details

wordpress“您没有足够的权限访问该页面”

错误原因 WordPress程序可以通过设置不同的数据表前缀来实现一个数据库安装多个WordPress网站。 由于本地测试环境使用此方法同时安装了多个WordPress测试程序,在一次将网站数据库备份到本地并使用phpmyadmin修改完表前缀后出现“您没有足够的权限访问该页面”的错误提示。 出现这个错误是因为修改前缀不够彻底,某些数据表中字段的值也包含了之前的前缀。所以我们要一并将之前的前缀改为现用的前缀,问题即可得到解决。 解决方案  包含了前缀的数据表有两个:“前缀_options”和“前缀_usermeta”。本实例为:test_options和test_usermeta。  首先进入表test_options,使用phpmyadmin的搜索功能。搜索option_name字段,运算符选择:LINK%…%  值填入之前的前缀名:wp_ 得到如下结果:  将wp_user_roles修改为test_user_roles;并继续对表test_usermeta进行修改。同样使用phpmyadmin的搜索功能。搜索meta_key字段,运算符选择:REGEXP^…$  值填入之前的前缀名+.*:wp_.* 得到如下结果: 将所有以前前缀名:wp_开头(如:wp_capabilities,wp_user-settings,wp_user_level,wp_user-settings-time等)的字段全部改为现前缀名:test_(如:test_capabilities,test_user-settings,test_user_level,test_user-settings-time等) 至此问题解决完毕。 FROM:http://jingyan.baidu.com/article/e2284b2b3b5085e2e7118d47.html

龙生   19 Mar 2015
View Details

.NET framework 4.0安装失败怎么办

每次我安装AUTO cad2012都会提示我必须要更新安装.NET framework 4.0,但总是提示安装失败。经过反复的学习与测试,我终于知道如何处理了。 找到安装包双击安装; 接受许可条款点击安装; 安装提示双进度条,安装成功将会提示你安装成功。 安装失败是,安装进度条会变成安装回滚条,将会提示安装未完成。 解决方法:开始——运行——输入cmd——回车——在打开的窗口中输入net stop WuAuServ 开始——运行——输入%windir% 找到有个叫SoftwareDistribution的文件夹,把它重命名为SDold 开始——运行——输入cmd——回车——在打开的窗口中输入net start WuAuServ 开始——运行——输入regedit——回车 找到注册表,HKEY_LOCAL_MACHINE\SOFWARE\Microsoft\Internet Explorer下的MAIN子键,右击main后,在上面菜单中找到“编辑”--“权限”,点击后就会出现“完全控制”等字样,勾上即可放心安装。 一般使用ghost系统都会出现这种问题,由于开发系统默认的权限设置导致这种情况无发安装。 FROM:http://jingyan.baidu.com/article/00a07f3892376982d028dc2a.html

龙生   19 Mar 2015
View Details

百度不收录怎么办 8个原因

几年前做网站的时候,新网站上线基本上两到三天百度,谷歌等搜索引擎都会收录,而且不需要发布推广外链接,如果关键字、产品竞争不是太强大,只要稍微做一下META头部设置就会有很好的排名。而如今网站每天都是成百上千的上线,做网站的站长一波又一波的出现,如今一个新网站被百度收录也不是那么容易。尤其是一些网络上已经充斥的产品,内容类型网站,如果你一个新域名网站希望在短期内被百度收录,不是一件简单的事情。几个星期之前,我同事的新网站,已经几个星期过去了,一直还没有收录。今天问我如何处理,我将采用我常用的几个方法促使网站收录以及有良好的排名效果。我先整理关于新网站不被百度收录的几个原因,希望大家有一个参考,可以改正我们现有网站的不足。  首先,选择域名。我们在注册域名的时候需要注意该域名是不是被用过,如果注册了一个之前被降权的域名,那是一件很悲哀的事情,如果被你注册到,以后要再次被收录,那需要一个相当长的考验期。我们在注册域名之前,先通过各种搜索引擎,查看有没有收录记录,如果有看下一是什么内容。如果内容正规的,应该没有问题,可能是企业网站到期没有续费或者换域名;如果是其他内容我们可以考虑不采用这个域名。  其次,网站空间的选择。有时候新网站不被收录,很多情况下是因为我们选择的主机商问题,如果主机商的IP被搜索引擎惩罚,蜘蛛不来爬行我们的网站,那也不会被收录。我们可以先让主机商给该主机的IP给我们看下,或者可以先使用几天不要付款。通过同IP检测网站,看其他网站是不是收录正常,如果大部分收录,快照以及site首页有问题,那我们还是换一家主机商吧。  第三,网站程序的选择。我们需要选择常规网站程序内核。不要下载或者使用有很多漏洞的,尤其是对搜索引擎不友好的网站。基本的SEO尝试我们需要知道,比如每个页面的标题需要不同,对应不同的页面内容。网站可以伪静态或者生成静态文件。如果是用的CMS,我们可以查看下用这款CMS的其他网站收录如何。  第四,网站内容。新网站对内容更为严格,从我们的网站上线到被收录,都处于被百度等搜索引擎考核阶段。我们内容千万不要采集或者是复制别人的。需要进行原创,或者伪原创更新。关于量上面,我们可以一天几篇,也可以一天一篇,根据自己的实际情况。只有等待被收录后,可以继续伪原创甚至适当转载。搜索引擎喜欢新内容。  第五,适当的外链接推广。如今网站竞争激烈,搜索引擎不会主动过来找你爬行内容,一个有外链接推广的网站,搜索引擎会顺着推广收录新的内容,尤其是收录速度上肯定比我们做好网站什么都不管挂在哪里强。对于推广的量我是这么做的,新网站一天10-20个外链接,持续每天都要去做。  第六,界面的友好程度。如今搜索引擎变得很聪明,我们在网站架构的时候需要考虑网站的“重度”,如果你网站图片或者动画太多,搜索引擎会跳过不抓取。因为他们喜欢抓取文字内容。而且在界面和代码布局上,需要有条理,减少垃圾代码的多余。  第七,不要过度优化。新网站我们站内优化要自然,不要关键字堆砌严重,因为这样搜索引擎会获悉你是一个作弊网站,新网站发展要自然,在以后收录或者权重高了后,再进行微调整。这些都是随着网站的发展,不断的提高和补充的。 第八,认真维护。往往成功就在一刹那间,不要认为几天或者几个礼拜不收录没长进,你就不更新,不维护了。往往很多站长都是这样的,做网站不会一夜成名,成功的背后都有辛酸。我们需要做的是坚持,坚持以上几点,做好了,不管我们做的什么网站,肯定有所回报。 from:http://jingyan.baidu.com/article/72ee561aa8061ae16138dfd8.html

龙生   11 Mar 2015
View Details
1 216 217 218 283