今天闲来无事,玩LOL抽奖,竟然抽中1,2,3,4,5折,喜不自胜,赶紧充值~

当我买了一个韦鲁斯之后,买第二个的时候提示我

这意味着我只能一个折扣用一次,看着后面的三个想买的我陷入了沉思。
我试着按F12打开谷歌浏览器Chrome开发者工具,整理下思路:

  1. 如果程序是简单的封包,js验证,请求,响应,那么我应该可以通过封包解除只买一个的限制。
  2. 如果程序在后台完成,我无法完成封包,解包,那么我只能看到腾讯的程序员是如何实现这一功能的。
  3. 我既看不到业务逻辑的实现,也无法封包作弊,但是可以学到安全知识。

第一步,我用元素选择器,首先观察到,当单机按钮就会提交到一个JS文件,这个JS文件是pgvSendClick(),百度之后没有找到想要的答案,具体答案就是腾讯自定义的一个方法。

<a class="btn-get" itemid="2110" href="javascript:;"
onclick="pgvSendClick({'virtualDomain':'lol.qq.com',hottag:'a20180224lucky.index.btn.get1'});"></a>

第二步,我利用抓包工具找到了一系列的网址

http://logs.game.qq.com/easnew/go/eas.php?click_type=98&e_code=399156

这个网址后来被我否定,原因如下:

1.将waterfall按开始时间排序发现最新调用的与购买有关的是ibuy开头的URL。

2.logs似乎是和日志有关。
3.i_buy.cgi返回值是json,为

var i_buy={“msg”:”[无限烈焰 黛安娜]每种折扣限购1次~”,”ret”:”-6352”,”serverTime”:”1527925419”}

说明成功返回正确值。
以上可分析出

http://apps.game.qq.com/cgi-bin/daoju/v3/hs/i_buy.cgi?areaid=20&propid=2110&iGoodsNum=1&_biz_code=lol&_plug_id=8600&_app_id=1003&iSandBox=0&iActionId=7597&scene_id

中的i_buy.cgi应该是处理了request请求,验证了无权限之后,返回了失败值。

第三步,分析console的输出情况

这里可以看到两次failed to load,应该是无关的错误,因为两次购买都会显示。可以分析出购买失败直接输出了filter,而购买成功会有XStream sent字样。
先不论XStream是怎么样的类型,看到from后的网址是本网址,说明经过失败购买至少一次经过一次过滤,并没有传递值?知识有限,暂不做深入分析。

第四步,分析source的项目树

综上所述,这次应该是第3种情况,我无法完成封包,因为数据是CGI处理了,并不是JS。
CGI的知识:
CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。

简单理解

CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如评论之类的东西。接着用户按一下“发布或提交”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后CGI程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。

功能

绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。

运行环境

CGI程序最初在UNIX操作系统上CERN或NCSA格式的服务器上运行。

操作系统

Windows NT及Windows 95的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。

处理步骤

⑴通过Internet把用户请求送到web服务器。
⑵web服务器接收用户请求并交给CGI程序处理。
⑶CGI程序把处理结果传送给web服务器。
⑷web服务器把结果送回到用户。

编写语言编辑

CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。对初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中:
· Perl (Practical Extraction and Report Language)
· Bourne Shell或者Tcl (Tool Command Language)
· PHP(Hypertext Preprocessor))
由于C语言有较强的平台无关性,所以也是编写CGI程序的首选。
Windows环境中:
· C和C++
由于Internet上大部分服务器使用的是UNIX操作系统,且几乎任一UNIX操作系统中都有Bourne Shell,因而大部分实现脚本都是用Bourne Shell编写的。
最终Perl由于其跨操作系统、易于修改的特性成为了CGI的主流编写语言,以至于一般的“cgi程序”就是Perl程序。

服务器配置编辑

CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。
配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。
⑴CERN格式服务器的配置:
编辑CERN格式服务器(起初其被命名为“CERN httpd”, 也被称为“W3C httpd”)的配置文件(通常为/etc/httpd.conf)在文件中加入:Exec cgi-bin//home/www/cgi-bin/.exec。命令中出现的第一个参数cgi-bin/指出了在URL中出现的目录名字,并表示它出现在系统主机后的第一个目录中,如:http://edgar.stern.nyn.**/cgi-bin/。命令中的第二个参数表示CGI程序目录放在系统中的真实路径。
CGI目录除了可以跟网络文件放在同一目录中,也可以放在系统的其它目录中,但必须保证在你的系统中也具有同样的目录。在对服务器完成设置后,须重新启动服务器(除非HTTP服务器是用inetd启动的)。
⑵NCSA格式服务器的配置
在NCSA格式服务器上有两种方法进行设置:
①在srm.conf文件(通常在conf目录下)中加入:Script Alias/cgi-bin/cgi-bin/。Script Alias命令指出某一目录下的文件是可执行程序,且这个命令是用来执行这些程序的;此命令的两个参数与CERN格式服务器中的Exec命令的参数的含意一样。
②在srm.conf文件加入:Add type application/x-httpd-cgi.cgi。此命令表示在服务器上增加了一种新的文件类型,其后第一个参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表示以这一扩展名为扩展名的文件是CGI程序。
在用上述方法之一设置服务器后,都得重新启动服务器(除非HTTP服务器是用inetd启动的)。

环境变量列表编辑

SERVER_NAME:运行CGI序为机器名或IP地址。
SERVER_INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。
SERVER_PROTOCOL:通信协议,应当是HTTP/1.0。
SERVER_PORT:TCP端口,一般说来web端口是80。
HTTP_ACCEPT:HTTP定义的浏览器能够接受的数据类型。
HTTP_REFERER:发送表单的文件URL。(并非所有的浏览器都传送这一变量)
HTTP_USER-AGENT:发送表单的浏览的有关信息。
GETWAY_INTERFACE:CGI程序的版本,在UNIX下为 CGI/1.1。
PATH_TRANSLATED:PATH_INFO中包含的实际路径名。
PATH_INFO:浏览器用GET方式发送数据时的附加路径。
SCRIPT_NAME:CGI程序的路径名。
QUERY_STRING:表单输入的数据,URL中问号后的内容。
REMOTE_HOST:发送程序的主机名,不能确定该值。
REMOTE_ADDR:发送程序的机器的IP地址。
REMOTE_USER:发送程序的人名。
CONTENT_TYPE:POST发送,一般为application/xwww-form-urlencoded。
CONTENT_LENGTH:POST方法输入的数据的字节数。

优点

CGI可以为我们提供许多HTML无法做到的功能。比如 a.一个记数器 b.顾客信息表格的提交以及统计 c.搜索程序 d.WEB数据库,用Html是没有办法记住客户的任何信息的,就算用户愿意让你知道。用Html也是无法把信息记录到某一个特定文件里的。要把客户端的信息记录在服务器的硬盘上,就要用到CGI。这是CGI最重要的作用,它补充了Html的不足。是的,仅仅是补充,不是替代。
使在网络服务器下运行外部分应用程序(或网关)成为可能。CGI-BIN 目录是存放CGI脚本的地方。这些脚本使Web服务器和浏览器能运行外部程序,而无需启动另一个程序。
它是运行在Web服务器上的一个程序,并由来自于浏览者的输入触发。CGI是在HTTP服务器下运行外部程序(或网关)的一个接口,它能让网络用户访问远程系统上的使用类型程序,就好像他们在实际使用那些远程计算机一样。
CGI能够让浏览者与服务器进行交互,如果你曾经遇到过在网络上填表或者进行搜索,就很有可能就是用的CGI。
尽管CGI易于使用,但是当大批人同时使用一个CGI应用程序是会反应较慢,网络服务器 速度也会受到很大 影响。CGI应用程序的优点是可以独立运行。
CGI应用程序可以由大多数的编程语言编写,如Perl(Practical Extraction and Report Language)、C\C++、Java 和Visual Basic等。不过对于那些没有太多编程经验的网页制作人来说,实在是一个不小的难题。

工作原理

1.浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL。
2.服务器收发到请求。
3.服务器执行指定CGI应用程序。
4.CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容。
5.CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。
6.网络服务器把结果返回到浏览器中。

注意的问题

CGI应用程序运行在浏览器可以请求的服务器系统上,执行时需要使用服务器CPU时间和内存。如果有成千上万的这种程序会同时运行,那会对服务器系统提出极高的要求。你要慎重考虑这个问题,以防止服务器系统崩溃。
不完善的CGI应用程序可能成为别人非法进人服务器系统的通道,有可能导致重要的资料被删除或外泄。CGI应用程序主要的用途有以下几种:
根据浏览者填写的HTML表单发送定制的答复;
创建可单击的图像缩小图;
创建一个浏览者可以搜索内容的数据库;
提供服务器与数据库的接口,并把结果转换成HTML文档;
制作动态HTML文挡。
如果一个CGI脚本可以在每台计算机上做同样的事情;编写脚本就会变的很容易。不幸的是,CGI脚本依赖于服务器的操作系统,因此,对于非UNIX服务器来说,Prl(UNIX下编写脚本的一个常用工具)脚本毫无用处。所以,你必须定制安装你的CGI脚本。
大多数服务器都提供CGI-BIN目录,但是这还不够。因为你应该拥有自己的CGI-BIN。这样,你就能运行自己的脚本(而不是让自己的系统去适应已存在于系统上的脚本)。因此,你的提供商应安装CGI-BIN,且能够帮助你编写脚本

ASP

ASP(Active Server Pages):活动服务器页面,就是一个编程环境,在其中,可以混合使用HTML、脚本语言以及组件来创建服务器端功能强大的Internet应用程序。如果你以前创建过一个站点,其中混合了HTML、脚本语言以及组件,你就可以在其中加入ASP程序代码。通过在HTML页面中加入脚本命令,你可以创建一个HTML用户界面,并且,还可以通过使用组件包含一些商业逻辑规则。组件可以被脚本程序调用,也可以由其他的组件调用。

ASP的工作原理:

当在Web站点中融入ASP功能后,将发生以下事情:
1、用户调出站点内容,默认页面的扩展名是.asp。
2、浏览器从服务器上请求ASP文件。
3、服务器端脚本开始运行ASP。
4、ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。
5、页面信息发送到浏览器。
因为脚本是在服务器端运行的,所以Web服务器完成所有处理后,将标准的HTML页面送往浏览器。这意味着,ASP只能在可以支持的服务器上运行。让脚本驻留在服务器端的另外一个益处是:用户不可能看到原始脚本程序的代码,用户看到的,仅仅是最终产生的HTML内容。
PHP:Hypertext Preprocessor
PHP 是一种服务器端的,嵌入HTML的脚本语言。PHP区别其他像客户端Javascript的地方是它的代码在服务器端执行.PHP能做什么?
最低水平,PHP可以做任何其他CGI程序所能做的事,例如收集表格数据,生成动态页面内容,或者收发cookies.可能最强大,最有意义的特性是PHP支持大范围的数据库。书写一个支持数据库的Web 页面是难以置信的简单。
下面是当前支持的数据库:
Adabas D InterBase Solid
dBase mSQL Sybase
Empress MySQL Velocis
FilePro Oracle Unix dbm
Informix PostgreSQL
PHP通过协议也支持与其他服务的”交谈”,像IMAP、SNMP、NNTP、POP3,甚至是 HTTP。你也可以打开晦涩的 网络接口和其他协议交互。
PHP的简要历史
1994年秋季,Rasmus Lerdorf 开始构思 PHP。早期的非发行版本被用在他的主页上,以追踪谁在看他的在线简历。1995年年初第一版本出台,当时PHP只被认为是个人主页开发工具。它由一个非常单纯的只能理解很少数特殊宏的分析引擎和 一些用在主页后端通用的工具组成,如留言簿,计数器和其他一些东西。这个分析器在1995年年中被重写并被命名为 PHP/FI 第二版。FI来自 Rasmus 写的另外一个包,用于解释 html 形式的数据.他结合了个人主页工具脚本和形式解析器,并加 上mSQL支持.这样就产生 PHP/FI 了. PHP/FI以令人惊奇的步调成长,人们开始把自己的代码贡献给它。
很难给出它的硬统计表,但可以估计在1996年末,整个世界至少有15,000个网站在用PHP/FI。到1997年年中,这个数字已经超过50,000了,而在此时PHP的发展也发生了变化。由Rasmus自己偏爱的和几个人开发的项目变成一个更有组织的团 体成就。Zeev Suraski和Andi Gutmans重写了解析器。这个新的解析器成为PHP版本3的基础。许多有用的代码从PHP/FI 继承到PHP3,并且很多是完全重写的。
今天(1999年年中)不管是PHP/FI或PHP3与很多商业产品捆绑在一块,例如C2级强度的Web服务器和红帽子Linux。根据NetCraft提供的数据推断,保守估计全世界应用PHP的网站已超过150,000个。由此看来,它比在因特网上运行Netscape 的旗舰企业服务器的站点还多。

附网页技术与标准

文档呈现语言
▪ HTML ▪ XHTML ▪ XML ▪ XForms
▪ DHTML
样式格式描述语言
▪ 层叠样式表 ▪ XSL
动态网页技术
▪ CGI ▪ FastCGI ▪ ASP ▪ ASP.NET
▪ ColdFusion ▪ JSP ▪ PHP
客户端交互技术
▪ ActiveX ▪ Java Applet ▪ JavaFX ▪ AJAX
▪ Silverlight ▪ ActionScript ▪ Flex ▪ AIR
客户端脚本语言
▪ JavaScript ▪ JScript ▪ VBScript ▪ ECMAScript
标识定位语言
▪ URL ▪ URI ▪ XPath ▪ URL重写
文档纲要语言
▪ DTD ▪ XML Schema

记一次失败的幸运召唤师抽奖之CGI程序相关推荐

  1. 记一次失败的幸运召唤师抽奖之动态网页技术

    拓扑结构 总线型拓扑 总线型拓扑是一种基于多点连接的拓扑结构, 是将网络中的所有的设备通过相应的硬件接口直接连接在共同的传输介质上.总线拓扑结构使用一条所有PC都可访问的公共通道,每台PC只要连一条线 ...

  2. 记一次失败的幸运召唤师抽奖之 动态网页技术

    动态网页是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互.完成用户查询,提交等动作.常用的语言有ASP,PHP,JSP等. 中文名 动态网页技术 也就是说 能通过后台与用户交互 ...

  3. 四、记一次失败的 CAS 搭建 之 结果总是那么伤(客户端)

    四.记一次失败的 CAS 搭建 之 结果总是那么伤(客户端) ===================================================================== ...

  4. HID Relay, 有线键盘转蓝牙项目学习:记一次失败的尝试

    HID Relay, 有线键盘转蓝牙项目学习:记一次失败的尝试 开始学习嵌入式后,最难受的一个点在于电脑端口不够.我的电脑有两个USB口一个TypeC口,鼠标和键盘都要插USB口,stm32和51也都 ...

  5. java小项目 幸运大抽奖_[Java教程]幸运大抽奖

    [Java教程]幸运大抽奖 0 2014-03-30 19:00:09 幸运大抽奖全新来袭,现在普遍的抽奖活动都是由flash开发的,然而,今天向大家展示由js实现的抽奖.早在2012年的时候写过一篇 ...

  6. tkinter 实现 幸运大抽奖

    tkinter 之 幸运大抽奖 from tkinter import * import random import threading import os path = os.path.dirnam ...

  7. 年关将至,公司都有年会了,做个幸运大抽奖软件,一起庆祝下

    由于一个朋友的要求,需要在晚会上做一个抽奖的软件,来随即抽取录入的号码进行抽奖,于是参考了一下别人做的抽奖程序,然后抽时间做了一个这样的软件,应该总体还是符合实际要求了,这样的程序麻雀虽小,五脏俱全的 ...

  8. 祭奠逝去的青春-记YY项目失败总结

    祭奠逝去的青春-记YY项目失败总结 Luo Weifeng 2011-5-21 时间过得真快,距上次做项目都快半年了,也是时候总结一下经验教训了. 首先,介绍下大背景.哈尔滨工业大学(威海)不算是很出 ...

  9. lol幸运召唤师链接_设计师如何为电子游戏带来好运

    lol幸运召唤师链接 Here are three links worth your time: 这是三个值得您花费时间的链接: How designers engineer luck into vi ...

最新文章

  1. 【Go】Go基础(七):包
  2. pythonturtle是标准库_Python中turtle库的使用
  3. 021 设计模式之工厂方法模式,抽象工厂模式的区别
  4. nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException(Spring循环依赖问题)
  5. 既稳又狂!黑鲨游戏手机2官宣发布时间:3月18日北京见
  6. java按时间范围过滤_按日期范围在WooCommerce中过滤产品
  7. 打印一种拓扑排序(假定给的是有向无环图时)DFS+栈
  8. mysql 清除主从_mysql主从同步及清除信息
  9. [Django]Windows下的Django安装——通过pip
  10. 液晶8K电视也能打造家庭影院?一起“宅”过电影情人节吧
  11. Python图片添加好看的中文字体并根据图片动态改变文字大小
  12. AT学习报告一 软件的初步使用
  13. WORKGROUP无法访问,您可能没有权限使用网络资源,请与这台服务器的管理员联系以.......
  14. Java mail outlook发邮件提示升级TLS1.2
  15. 学习日记day22 平面设计 构图
  16. base64编码图片替换url图片
  17. 小红书标签怎么添加?小红书标签对作品有什么影响
  18. oracle人民币大写转换
  19. 模拟实现内存动态分区分配与回收
  20. win10下如何使用的debug

热门文章

  1. android手机和荣耀哪个版本好,安卓手机谁的系统更好用?华为只排第5,第一名意想不到...
  2. python不允许标点符号_python3去掉string中的标点符号方法
  3. 什么是ERP系统?它有什么功能?
  4. 北京皮肤医院去色斑用什么
  5. Dsx-5000线缆测试仪的基本功能
  6. 吐血分享:QQ群霸屏技术(初级篇)
  7. ADO Error: 0x80040E14
  8. 抖音视频剪辑书单号的新创作方向
  9. 发那科机器人网段_FANUC 机器人应用项目
  10. 期末前端web大作业:HTML+CSS+JavaScript简洁的餐饮网站(8个页面) 学生美食网页设计作品静态HTML网页模板源码 大学生美食文化网站制作 简单餐饮文化网页设计成品