php漏洞怎么办,开源软件漏洞数量在过去一年有怎样的变化?
几年前,“开源”还是点点星火,如今已成燎原之势。在过去的2018年,企业都在积极加强自己在开源方面的实力,IBM大手笔340亿美元收购了RedHat,微软75亿美元收购了GitHub。
开源软件蓬勃发展的同时,安全漏洞风险也在增加。SNYK不仅向500多名开源用户和维护人员分发了调查报告,同时也监控了SNYK内部监控和保护的数十万个项目的漏洞数据,并结合外部研究,发布了2019年开源安全状况报告。
首先,我们先来看几个关键性结论:
2017年到2018年,包管理工具索引的开源包数量呈爆炸式增长,其中Maven Central增长了102%,PyPI增长了40%,NPM增长了37%,NuGet增长了26%,RubyGems增长了5.6%。
应用程序的漏洞在短短两年的时间内增加了88%,其中SNYK跟踪的Rhel、Debian和Ubuntu的漏洞数量,2018年是2017年的四倍多。
最受欢迎的默认Docker映像Top 10中的每一个都至少包含30个易受攻击的系统库,其中44%可以通过更新Docker映像来修复已知漏洞。
调查显示,37%的开源开发人员在CI期间不会进行任何的安全测试,54%的开发人员不会进行Docker映像的安全测试,而从漏洞出现在开源包中到漏洞修复的时间可能会超过两年。
调查显示,81%的调查者认为开发人员应该负责开源安全,68%的调查者认为开发人员应承担Docker容器镜像的安全;但只有十分之三的开源维护人员认为自己应该具备较高的安全知识。
开源应用开源软件对现代软件开发产生了深远的影响,并且这种影响力还在每年递增。据GitHub报告称,2018年新用户的注册量超过了之前六年的总和,且平台上创建的新组织和新存储库增加了40%。另外,开源软件同时也推动了语言和平台的发展,影响了行业增长,Forrester报告称,开源软件是业务技术战略的重要组成部分。
前文我们曾提到,科技公司都在大量使用开源,每个编程语言生态系统中都有越来越多的开源库被索引,且有的增长率实现了两位数,甚至是三位数的增长(Maven Central实现了102%的三位数增长。)
开源的使用正走在高速路上,2018年Java包增加了一倍,NPM增加了大约250000个新包。
据Linux基金会报告称,2018年开源贡献者提交了超过310亿行的代码,这些代码一旦要在实际的生产环境中使用,那么拥有、维护和使用此代码的人就必须承担一定的责任,规避风险。
据CVE列表报告显示,2017年总共有14000+个漏洞,打破了CVE一年内报告的漏洞记录,而2018年,漏洞数量继续上升,超过了16000个。
我们在调查中关注了不同生态中不同软件包的下载数量,同时也关注了这些开源软件包如何转化为用户采用。
根据Python注册表显示,PYPI在2018年的下载量超过140亿,相比于2017年报告中的63亿,下载量增加了一倍。从下表中我们可以看到在8月份的时候,下载量出现了激增的情况,这是由于LineHaul(PYPI的统计收集服务)出现故障造成的,该故障导致在8月之前大半的下载量丢失。
另外,开源软件消费也取得了巨大的飞跃,从PYPI中下载python包的数量是原来的两倍,从NPM下载javascript包的数量更是惊人,达到3170亿个。
NPM注册表是整个JavaScript生态系统的核心。在过去的几年中,无论是添加还是下载的软件包数量都稳步增,仅2018年12月的一个月时间就有300多亿次。
而Docker的采用也促进了开源软件的增长,据悉,Docker公司在2018年每两周就有超过10亿个容器下载,截止到目前,数量约有500亿个。仅2018年一年就有超过100万个新的应用程序添加到Docker Hub中。
风险和影响而伴随着软件包数量的增加,是漏洞的增加,前文我们提到了2018年新漏洞数量再创新高,超过16000个。
在GitHub发布的Octoverse报告中,Security成为了最受欢迎的项目集成应用程序。而Gartner的行业分析师在最近的一份应用程序安全报告中也表示企业应该在应用程序生命周期中尽早测试安全性。
开源软件使用的越多,代码中自然就包含了更多其他人的代码,累积的风险就会越大,因为这些代码目前或者是将来可能会包含漏洞。当然,这里的风险并不单单是指代码的安全性,同时也包括了所采用代码的许可以及该代码是否违反了许可证本身。
在接受调查的受访者中,43%至少有20个直接依赖关系,这无疑就需要增强对这些引入库的源码的监控。而事实上,只有三分之一的开发人员可以在一天或更少的时间内解决严重性漏洞。
“企业应定期使用SCA工具来审计包含软件资产(如版本控制和配置管理系统)的存储库,以确保企业开发和使用的软件符合安全和法律标准、规则和法规。另外,应用程序开发人员也可以使用SCA工具来检查他们计划使用的组件。
如今,没有开源依赖的情况下写代码几乎是不可能完成的任务,所以正确跟踪所依赖的库就成为了一个难题。采取何种措施才能既消除漏洞,同时还能保持依赖项之间的兼容性?
NPM、Maven和Ruby中的大多数依赖项都是间接依赖项,由少数明确定义的库请求。在调查中,Snyk扫描了100多万个快照项目,发现间接依赖项中的漏洞占整个漏洞的78%,这说明我们需要进一步增强对依赖树的洞察,并突出脆弱路径的细微差别。
开源维护者的安全状况虽然在大多数开发人员和维护人员都认同在构建产品和编写代码时,安全性是非常重要的,但是对他们而言,在构建开源项目时没有“教科书式”的规则可供他们参考,因此安全标准可能有很大的不同。
在今年的调查中,大部分用户(平均每10个用户中就有6.6个)都将他们的安全技术选择在中等水平,7%的受访者认为目前的安全技术水平较低。
相应的专业知识排名,2019年的排名发生了一些变化,尤其是High和Low,其中High占据了30%,Medium占据了63%,而low占据了7%,而在2017年,High只占了17%,low占了26%。
在调查过程中,我们还发现了维护人员通常都会将时间和经历放在项目的功能性方面,而往往忽视了安全性。
安全审计安全审计作为代码审查的一部分,其中需要双方确保遵循安全代码最佳实践,或者采取另一种方式,即通过运行不同的安全审计变体,如静态或动态应用程序安全测试。
无论是手动审计还是自动审计,它们都是检测和减少应用程序中漏洞的重要组成部分,并且应该在开发阶段尽可能早地定期执行,以降低后期暴露和数据泄露的风险。
去年,有44%的受访者表示他们从未进行过安全审计,而今年,这一数字要低得多,只有26%的用户表示他们没有审计源码。与去年的报告相比,今年重复审计也呈现出了积极的趋势,以季度和年度为单位,有10%的用户会经常的审计代码。
对于转行做PHP全栈开发需要做一些什么样的准备?
php 网页开发语言,主要与mysql数据库进行通信,及网页数据处理工作 追问: 就只有这些吗 ? 那发展前景你觉得怎样 回答: 主要是做这些的,PHP前景不错啊,给PHP开源的人很多,个人觉得ASP火的原因是因为那是微软支持的,但是很多程序ASP的代码比PHP的代码多、复杂,这样导致的后果就是漏洞多!而PHP相对JSP简单,如果要学JSP,也建议先从PHP入手! 追问: 我学的是java 想看看PHP的怎么样 回答: PHP相对后台语言来说是比较简单的,适合入门! 追问: PHP适合做前台 大型的开发做的来不 回答: 汗,PHP是做后台的,主要是做网站后台的! 追问: 哦```` 回答: 告诉你一下ASP,HTML,PHP,JXP有什么区别!首先,就代码而言,html是基本的;jsp,asp,php文档都以html为基础,只是用程序代码动态输出html代码,特点是同一文档根据不同情况可以输出不同的html代码。jsp,asp,php文档都要经过编译后生成html代码,也就是我们在浏览器中看到的结果,不同之处在于jsp是一般浏览器都能编译的,asp和php需要服务器支持,另外cgi也需要服务器支持。 从编程角度看,asp和php都可以支持多充语言编程,可以javascript,vbscript或者perl等等,甚至可以混合语言编程。 不能简单从扩展名判断其文档类型!应该从服务器和源代码来判断。里面有<%...%>的一般是asp文档,里面有$的一般是php文档。由于一般asp和php都有限制,所以在浏览器中采用查看源代码或者直接下载该文档的方法都是看不到真正源代码的,只能看到源代码运行后生成的html,真正得到源代码恐怕只能攻击并pj服务器:( aspx与asp类似,只是支持.net,在开发中更方便,功能更强大。
PHP代码保护方法?
比如你要把phpMyAdmin这个MySQL图形化管理工具打包到你的应用中,你只需把PHP解释器和phpMyAdmin项目打包在一起就行.因为PHP从5.4开始就内置了一个HTTP服务器,只需这样就可以运行phpMyAdmin程序:
然后你的Electron去访问这个本地的PHP服务器就行.
我打包到Android上配合WebView跑的PHP7解释器,APK大小才5个MB,所以不用担心体积太大.
如果你需要保护你的PHP项目的代码,可以用PHP7的opcache.file_cache导出脚本的opcode,可用于实现源代码保护:
php如何防止sql注入攻击?
为了防止sql注入攻击,首先要明白sql注入攻击是什么?然后再针对sql攻击特性去防止。
sql注入攻击就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
其实,我们可以简单的理解SQL注入为:未对用户输入进行过滤,导致用户的一些输入在程序执行时,当做SQL语句的一部分进行执行,从而针对一些敏感操作:OR 1=1 或者 WHERE 1=1 这种条件的加入,使得我们本身的SQL逻辑被跳过执行。
从sql注入攻击的特性中,我们发现sql攻击主要是对sql语句或特定sql关键词进行改写,达到一种欺骗程序的方式,由此,我们只需要把这种欺骗限制的语法进行规范话控制,就能有效的防止sql注入。
那么在PHP中,可以通过简单的四种方法来有效防止SQL注入:
1、对用户的输入进行过滤处理后,在进行操作,如:addslashes()方法或者开启magic_quotes_gpc方法;
2、针对获取的数值型数据,进行二次转换,如intval(),floatval();
3、所有需进行数据库查询的变量都使用单引号(')包围;
4、使用PDO或mysqli来对数据库进行操作。
如何判断PHP源码是否存在SQL注入漏洞?
判断是否存在SQL注入首先找到可能的注入点;比如常见的get,post,甚至cookie,传递参数到PHP,然后参数被拼接到SQL中,如果后端接收参数后没有进行验证过滤,就很可能会出现注入。比如xxx.com?id=321,id就很可能是注入点。
说白了就是不要相信用户输入,对用户可控的参数进行严格校验。注意是严格校验!简单的去空格,或者是特殊字符替换很容易绕过。
如果已经有原码,可以进行代码审计,进行逐一排查。也可以搭建本地环境使用类似于sqlmap这样的自动化工具进行可以链接的检测。
个人理解仅供参考,如有偏颇望批评指正!