
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了“K哥爬虫普法”专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知晓如何合法合规利用爬虫技术,警钟长鸣,做一个守法、护法、有原则的技术人员。
2019年8、9月期间,被告人袁海东、赖永豪通过“猪八戒”网络平台以人民币7500元的价格向苏州市相城区黄埭镇春申湖路电信营业厅实际经营者计某及员工付某(均另案处理)出售了一款名为“telecom.exe”的爬虫软件,该软件根据计某、付某的要求定制,具有根据输入的查询请求头与渠道ID,模拟生成网页请求包,突破原本登录工号的权限,实现获取不同渠道ID权限内数据的功能。制作过程中,由被告人袁海东作为中间人,与计某、付某议价,了解定制要求,并将技术要求和细节转述给被告人赖永豪,由被告人赖永豪具体负责软件制作,制作完成后,由被告人赖永豪将涉案软件发送给被告人袁海东,由被告人袁海东交付给付某。被告人袁海东得款7500元,并将其中1500元分配给被告人赖永豪。
软件交付后,付某利用该软件从江苏电信营业云平台系统中获取了苏州市大市范围内70余万组的电信宽带工单信息。
使用授权账号登录 “bss.telecomjs.com” 通过订单查询系统,进行一次订单查询,打开浏览器调试器截取请求头,启动 “telecom.exe”,选择 “查询渠道”,选择查询日期、地点、范围,并输入截取的请求头与渠道ID “21000”,点击 “开始查询”,获取到数据,另存为 “渠道订单_21000.csv”。
证人计某的证言笔录,证实其为了快速查询并保存快到期的宽带客户数据,由付某介绍,在“猪八戒”网络平台找到“天辰”(袁海东)制作软件,具体的软件功能由付某进行沟通,计某共计支付7500元软件制作费。
证人付某的证言笔录,2018年11月之后的客户,新系统每个工号只能查自己渠道的客户,限制非常多。我从订单系统进去,渠道前面有一个灰色的勾,我右键点击弹出来“查看元素”点击后,会跳出来网页代码,网页代码里可以改渠道。正常来讲,用某渠道员工的BSS系统工号登录进去是看不全的,只能本渠道,就是本营业厅做的业务订单,看不到别人的订单,但是我用改代码的方式可以看到别人的订单,是改一个叫渠道ID的内容,实际就是改系统代码的一个操作,然后再填时间,就能拉出来别的渠道某时间内所有订单的情况了。这些数据现在能看到,以后不一定能看到,我和计某也讲了这件事。我说这个数据很多,要保存下来,以后用。我不会搞,我让计某把新系统客户资料保存下来。
证人周某的证言笔录(身份为电信公司员工),电信营业厅普通员工的工号,权限是很低的,这种工号是营业厅给员工开的,登录时候需要员工刷脸验证,有密码也基本不用,正常都是刷脸登录,同一工号在同一时间只能在一个地方登录。
证人王某的证言笔录(身份为中国电信苏州分公司安全保卫部员工),2018年11月我们进行了系统更新,升级后,普通工号可以看到2018年11月之前办理宽带的工单信息,2018年11月之后的工单信息,普通工号只能看到自己受理的工单信息,看不到别人及其他代理商办理的工单信息。
被告人袁海东的供述笔录,供称计某自称是电信运营商,要求做一个复制粘贴宽带客户数据的软件,粘贴后汇总,软件就是要解密破解电信的这个网页系统,然后获取相关代码或者数据,实现相应功能。赖永豪说数据库有加密,可以做,要价1500元,我和计某要价7500元。后来增加一个渠道查询的功能,填写不同的渠道,然后查询到不同渠道里面的客户信息复制下来。使用的时候登录账号密码,进入江苏电信的界面,打开赖永豪制作的软件,会弹出一个请求头,在里面随便输入一个工号,就可以看到这个工号的数据。这个软件制作之前,计某他们可以手工操作,通过査看元素输入对方工号进数据库后再下载。
被告人赖永豪的供述笔录,供称我做了一个爬虫软件,可以从中国电信苏州市分公司BSS系统上查询、复制保存数据信息。2019年8月底9月初,袁海东的客户提供了VPN和登录工号,我远程登录上之后,袁海东把客户的要求告诉我,我来做软件。开始客户要我做一个复制粘贴宽带客户数据的软件,粘贴下来,汇总到EXCEL表格里,后来,我听袁海东讲,客户要增加一个查询渠道的选项,在渠道查询里,客户可以自己输入渠道,查询该渠道里面的数据。通过我这个软件,把网络请求复制到请求头,我的软件就和BSS系统链接起来,在查询渠道选项框里输入不同的渠道,就可以查询到该渠道的信息,不需要手动操作。登录的账号就是一个渠道ID,通过任何一个账号登录上去后,在业务查询网页下,通过查看元素,修改源代码,然后填出想看的工号(就是渠道ID),可以看到任何渠道ID的数据,他们之前就知道这个操作,我的软件就是省掉了他们的手工输入。如果不修改源代码只能看到登录时使用工号下的信息,其他渠道ID下的数据是没有权限看的。制作这个软件袁海东付给我1500元。
本案的用户行为超出了爬虫的界限:仅可采集用户正常访问的公开数据。一般用某渠道员工的 BSS 系统工号登录后是无法查看超越工号权限的数据(只有本营业厅做的业务订单),但是被告人在系统禁止改变渠道ID的情况下,通过修改网页源代码中的渠道ID从而非法查看其他渠道的订单信息,构成非法越权。
根据《最高人民法院、最高人民检察院关于办理危害计算机信息系统安全刑事案件应用法律若干问题的解释》第二条第一款第(一)项规定,“具有避开或者突破计算机信息系统安全保护措施,未经授权或者超越授权获取计算机信息系统数据的功能的”,应当认定为刑法第二百八十五条第三款规定的“专门用于侵入、非法控制计算机信息系统的程序、工具”,本案例是符合的。
早在2013年,被告人袁海东、赖永豪就曾因相同罪名被上海市公安局长宁分局立案侦查并移送公诉机关,虽然当时法院对他们作出相对不起诉的决定,不过这次也因此被从重处罚,常在河边走哪有不湿鞋,切忌抱有侥幸心理,游走于灰色地带,终究面临法律的制裁,对爬虫单应该有足够的认识,分析其不违法的情况下再去接,切莫因小失大,得不偿失。
这个案例令人眼前一亮的点是,“中间商”袁海东向甲方开价7500元,事成只给了程序员赖永豪1500元,抽成高达80%!赖永豪肯定想不到合作多年的“老熟人”,靠他赚的盆满钵满,这也是值得所有程序员们注意的。

我有一个Ruby数组[1,4]。我想在中间插入另一个数组[2,3],这样它就变成了[1,2,3,4]。我可以使用[1,4].insert(1,[2,3]).flatten实现这一点,但是有更好的方法吗? 最佳答案 您可以通过以下方式进行。[1,4].insert(1,*[2,3])insert()方法处理多个参数。因此,您可以使用splat运算符*将数组转换为参数。 关于ruby-如何在数组中间插入一个数组?,我们在StackOverflow上找到一个类似的问题:
在rails开发环境中,cache_classes是关闭的,所以你可以修改app/下的代码,不用重启服务器就可以看到变化。不过,在所有环境中,中间件只会创建一次。所以如果我有这样的中间件:classMyMiddlewaredefinitialize(app)@app=appenddefcall(env)env['model']=MyModel.firstendend我在config/environments/development.rb中执行此操作:config.cache_classes=false#thedefaultfordevelopmentconfig.middleware.
如果有人有兴趣将PDF文件保存在PDFKit中间件gem显示的文件系统中,那么这里是...重写middleware.rb文件的call方法。在覆盖中只需替换这一行:body=PDFKit.new(translate_paths(body,env),@options).to_pdf与pdf=PDFKit.new(translate_paths(body,env),@options)file=pdf.to_file('Your/file/name/path')Mymodel.my_method()#Youcanwriteyourmethodheretousethatfilebody=pdf
我的Rails4应用程序使用了一个自定义Rack中间件。如果客户端未提供有效信息(我'正在开发API)。因此,在每个请求之前它会更改这些header,并且在每个请求之后它会添加一个带有自定义媒体类型信息的自定义X-Something-Media-Typeheader。我想切换到Puma,因此我有点担心这种中间件的线程安全性。我没有使用实例变量,除了我们在每个中间件中遇到的常见@app.call一次,但即使在这里我也复制了一些我在RailsCasts的评论中读到的内容:definitialize(app)@app=appenddefcall(env)dup._call(env)endde
我为你们准备了一个简单的。我想要一个特色内容部分,其中排除了当前文章所以这可以通过delete_if使用MiddlemanBlog:但是我使用的是中间人代理,所以我无法访问current_article方法...我有一个YAML结构,其中包含以下模拟数据(以及其他数据),文件夹设置如下:data>site>caseStudy>RANDOM-ID423536.yaml(由CMS生成)在每个yaml文件中,您会发现如下内容::id:2k1YccJrQsKE2siSO6o6ac:title:Heyplace我的config.rb看起来像这样data.site.caseStudy.eachdo
我有一个很长的文本,我想用空格替换其中的点,但只能在文本的中间。例如:Domain:...................google.com我需要这样:Domain:google.com我发现了这个用单个空格替换点的正则表达式:str.gsub!(/(?但这还不够,因为它会产生:Domain:google.com我需要保留与点一样多的空格。你会如何解决? 最佳答案 你快到了,你的正则表达式没问题,只需使用String#gsub的block版本计算替换匹配的长度:▶str='Domain:...................goo
我有一个提供一些Rack中间件的gem,让它工作的唯一方法是将它放在我的application.rb中config.middleware.use"TBBC::Editor::Middleware"当我的gem在应用程序Gemfile中使用时,如何才能自动使用此中间件? 最佳答案 如果您打算将您的gem用于Rails3,您可以提供一个Railtie。如果使用Rails,您可以自动加载它。假设您的gem名称是tbbc,将它放在lib/tbbc/railtie.rb中:moduleTBBCclassRailtie在lib/tbbc.rb中
我正在使用Rails5,我正在尝试改进对我的API的无效JSON请求的错误处理。我尝试通过救援在Controller中解析来处理无效格式的JSON,但意识到如果用户将ContentType添加到他们的请求header,Rails中间件会在我的JSON请求到达Controller之前解析它。我遵循了以下指南:https://robots.thoughtbot.com/catching-json-parse-errors-with-custom-middleware但是,在启动服务器时出现以下错误:.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems
试图重现“只有聪明人才能读懂这篇文章”的模因。这是一个示例:Hradtoblveieetahtyoucluodaulacltyuesdnatnrdwahtyor’uerdanieg.Thephaonmnealpweorofthehmuanbairn,aoccdrnigtoarscheearchatCmabrigdeUinervtisy,sowhstahtitdeosn’tmttaerinwahtoredrtheltteersinawrodare,theolnyiprmoatnttihngistahtthefristandlsatltteerbeintherghitpclae.Thers
我有一些Haml部分,其中许多包含样板文件.容器。排.col-lg-12当我尝试抽象出ala=partial"site_section"时,我得到:syntaxerror,unexpectedkeyword_end,expectingend-of-inputend;end;end;end我正在使用ruby2.2.2。如何在Middleman的Haml部分中渲染Haml部分?谢谢更新这显然是处理我的部分(上图)的某种特殊情况。我还有其他局部渲染效果很好。更新关于这个thisrepo,布局实际上是:_site_section:.容器。排.col-lg-12_nested_section