为什么要开源?

什么是开源?

开源软件是其源代码已由其版权所有者公开的软件。在真正的开源许可证下,软件是协作开发的,其他程序员可以查看、修改或使用自己的代码。这种“纯”开源模式通常被称为FOSS(自由和开源软件)。

开源的一个变体是“源代码可用”,这意味着没有授予修改或以其他方式使用代码的权限,但它可供检查。出于安全目的,这与真正的开源一样好,因此当我在本文中提到“开源”时,我包含“源代码可用”的代码。

什么是闭源?

大多数软件都是由商业公司编写和开发的。可以理解的是,这些公司热衷于不让其他人窃取他们的辛勤工作或商业机密,因此他们使用加密隐藏他们的代码,以免被窥探,任何未经许可使用或修改代码的尝试都将导致诉讼或更糟。

那么问题出在哪里呢?

正如我所说,这一切都是可以理解的,但是在安全性方面,它提出了一个主要问题。如果没有人能看到程序所做的事情的细节,我们怎么知道它没有做恶意的事情呢?基本上我们不能,所以我们只需要信任所涉及的公司,这是我们偏执的安全类型不愿意做的事情(有充分的理由)。

为什么开源是最好的解决方案?

如果代码是开源的,那么它可以由任何有资格这样做的人独立检查和审计,以检查是否存在后门、漏洞或其他安全问题。开源不是一个完美的解决方案(见下文),但它是验证软件是否只做它应该做的事情的唯一方法。

即使代码尚未经过审核,它可免费进行审核的事实也强烈表明它是可以信任的,因为开发人员不太可能包含恶意代码,然后让任何愿意查看的人发现它。

不是一个完美的解决方案...

不幸的是,拥有审核开源软件(通常是免费的)的技能和时间的人数量有限,这意味着绝大多数开源程序尚未经过审核。

这个问题变得更加复杂,因为许多开源程序非常复杂,包含成千上万的代码行,所以即使它们已经过审计,审计人员也完全有可能错过了一个问题(特别是如果恶意代码被故意隐藏)。

但。。。

因此,开源并不能保证程序是“干净的”,但它仍然是我们拥有(或可以拥有)最好的保证。另一种选择是闭源,不提供任何保证。

始终验证开源程序

因此,开源对安全性非常有用。耶!但是你怎么能确定你刚刚下载的开源程序没有被以某种方式篡改呢?

这听起来像是妄想的阴谋幻想,但在 2016 年 <> 月,最流行的 Linux 开源操作系统版本之一 Linux Mint 的网站遭到黑客攻击,下载者可以使用该操作系统的受损版本,

"黑客制作了一个修改后的Linux Mint ISO,里面有一个后门,并设法入侵我们的网站以指向它。"

受感染的Linux ISO映像安装了带有Internet Relay Chat(IRC)后门Tsunami的完整操作系统,这使攻击者可以通过IRC服务器访问用户的系统。所以威胁是非常真实的。

在这种情况下,费心对文件的 MD5 哈希进行校验和的下载者会发现欺骗,但这种哈希检查并不是可靠的保护,因为如果网站首先可以被黑客入侵,那么用验证所包含文件的虚假校验和替换已发布的校验和是微不足道的。

对于开发人员来说,更好的是对其软件进行数字签名,以便用户可以验证文件的来源(Mint 开发人员在这方面非常宽松,因为他们的软件没有进行数字签名,甚至使用的 MD5 哈希函数也已知已损坏!

请参阅我的文章 数字签名 - 为什么以及如何使用它们以获取更多信息。不幸的是,验证数字签名是一种痛苦,但如果您关心安全性,这是必要的。

我还应该指出,理想情况下,所有软件都应该进行数字签名和验证,但由于任何人都可以自由修改开源代码,因此它比封闭源代码更容易篡改。因此,验证开源程序尤为重要。

开源:结论

开源不是一个完美的解决方案,但它提供了最好的(也是唯一!)保证软件是可信的。另一种选择是闭源,它不提供任何保证(除了对公司的盲目信任,这是科技公司不值得的信念)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零基础入门学习Python》第075讲:GUI的终极选择:Tkinter12

Tkinter 的基本组件我们已经介绍得七七八八了&#xff0c;剩下的一些我们在这节课全部都会讲解完毕。 &#xff08;一&#xff09;Message组件 Message&#xff08;消息&#xff09;组件是 Label 组件的变体&#xff0c;用于显示多行文本消息。众所周知&#xff0c;我们的Lab…

sqlalchemy flask长时间未使用 导致数据库连接失效

临时解决方案&#xff1a;在正式运行定时任务之前&#xff0c;先跑一个session.query()&#xff0c;相当于唤醒连接。 参考 https://blog.csdn.net/sinat_42483341/article/details/103723691

【腾讯云 Cloud Studio 实战训练营】Redisgo_task 分布式锁实现

文章目录 前言问题场景腾讯云 Cloud Studio Redisgo_task长短类型分布式场景介绍Redisgo_task实现原理SetNx(valueexpire)原子性子协程Done()时间点子协程中的Ticker Redisgo_task唯一外部依赖Redisgo_task Lock结构Redisgo_task架构健壮性设计Redisgo_task可扩展性Redisgo_tas…

MyBatis-Plus 和达梦数据库实现高效数据持久化

一、添加依赖 首先&#xff0c;我们需要在项目的 pom.xml 文件中添加 MyBatis-Plus 和达梦数据库的依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifac…

Docker 命令没有提示信息

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; linux安装docker后发现使用docker命令没有提示功能&#xff0c;使用 Tab 键的时候只是提示已有的文件 解决方案&#xff1a; 提示&#xff1a;这里填写该问题的具体解决方案&#xff1a; Bash命令补全 Docke…

驱动开发 day8 (设备树驱动,按键中断实现led亮灭)

//编译驱动 (注意Makefile的编译到移植到开发板的内核) make archarm //清除编译生成文件 make clean ****************************************** //安装驱动 insmod mycdev.ko //卸载驱动 rmmod mycdev 需要在<内核路径>/arch/arm/boot/dts/ 修改 stm32mp157a-fsm…

微信小程序使用 canvas 2d 实现签字板组件

本文是在微信小程序中使用 canvas 2d 来实现签字板功能&#xff1b; 效果图&#xff1a; 代码&#xff1a; 1、wxml <view><canvas id"canvas"type"2d"bindtouchstart"start"bindtouchmove"move"bindtouchend"end&qu…

Scratch Blocks自定义组件之「下拉图标」

一、背景 由于自带的下拉图标是给水平布局的block使用&#xff0c;放在垂直布局下显得别扭&#xff0c;而且下拉选择后回修改image字段的图片&#xff0c;这让我很不爽&#xff0c;所以在原来的基础上稍作修改&#xff0c;效果如下&#xff1a; 二、使用说明 &#xff08;1&am…

【图论】差分约束

一.情景导入 x1-x0<9 ; x2-x0<14 ; x3-x0<15 ; x2-x1<10 ; x3-x2<9; 求x3-x0的最大值&#xff1b; 二.数学解法 联立式子2和5&#xff0c;可得x3-x0<23;但式子3可得x3-x0<15。所以最大值为15&#xff1b; 三.图论 但式子多了我们就不好解了&#xff0…

开源的跨平台的音视频处理工具FFmpeg

文章目录 FFmpeg概述FFmpeg使用场景go语言中使用FFmpeg FFmpeg概述 FFmpeg是一个开源的跨平台的音视频处理工具&#xff0c;可以对音频、视频进行转码、裁剪、调节音量、添加水印等操作。 广泛的格式支持。 FFmpeg能够解码、编码、转码、复用、分离、流式传输、过滤和播放几乎…

【MySQL】视图与用户管理

【MySQL】视图 视图视图概念使用基表与视图的相互影响 用户管理新增用户删除修改密码 用户权限授予权限回收权限 视图 视图概念 视图就是一张虚拟表&#xff0c;其内容由查询定义。与真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化影响到基表&…

SpringBoot内嵌的Tomcat:

SpringBoot内嵌Tomcat源码&#xff1a; 1、调用启动类SpringbootdemoApplication中的SpringApplication.run()方法。 SpringBootApplication public class SpringbootdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootdemoApplicat…

异常统一处理实现

异常处理 4.6.1 异常问题分析 在service方法中有很多的参数合法性校验&#xff0c;当参数不合法则抛出异常&#xff0c;下边我们测试下异常处理。 请求创建课程基本信息&#xff0c;故意将必填项设置为空。 测试发现报500异常&#xff0c;如下&#xff1a; http://localho…

Vue3和typeScript路由传参

1 params传的参数&#xff0c;页面刷新就消失,而query传的参数&#xff0c;页面刷新还会存在&#xff0c;所以通常用query。 query传参 跳转页面&#xff1a;拿到router对象,调用push方法做跳转. import { useRoute,useRouter} from "vue-router"; export default…

iOS 搭建组件化私有库

一、创建私有库索引 步骤1是在没有索引库的情况下或者是新增索引的时候才需要用到&#xff08;创建基础组件库&#xff09; 首先在码云上建立一个私有库索引&#xff0c;起名为SYComponentSpec 二、本地添加私有库索引 添加私有库索引 pod repo add SYComponentSpec https:/…

Transformer 论文学习笔记

重新学习了一下&#xff0c;整理了一下笔记 论文&#xff1a;《Attention Is All You Need》 代码&#xff1a;http://nlp.seas.harvard.edu/annotated-transformer/ 地址&#xff1a;https://arxiv.org/abs/1706.03762v5 翻译&#xff1a;Transformer论文翻译 特点&#xff1…

ElasticSearch基础篇-Java API操作

ElasticSearch基础-Java API操作 演示代码 创建连接 POM依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sch…

33.利用abs 解决绝对值问题(matlab程序 )

1.简述 abs函数的功能是绝对值和复数的模 语法 Y abs(X) 说明 Y abs(X) 返回数组 X 中每个元素的绝对值。如果 X 是复数&#xff0c;则 abs(X) 返回复数的模。 示例 标量的绝对值 y abs(-5) y 5 向量的绝对值 创建实值的数值向量。 x [1.3 -3.56 8.23 -5 -0.01…

【POP3/IMAP/SMTP】QQ邮箱设置

什么是 POP3/IMAP/SMTP 服务 POP3 &#xff08;Post Office Protocol - Version 3&#xff09;协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。 IMAP &#xff08;Internet Message Access Protocol&#xff09;协议用于支持使用电子邮件客户端交互式存取服务…

二十三种设计模式第二十二篇--中介者模式

说到这个模式就有趣了&#xff0c;不知道大家在生活中喷到过中介没&#xff1f;其实中介这个词吧&#xff0c;我也说不上好还是坏&#xff0c;有时候他可以帮助人们更快的达到某个目的&#xff0c;但有的时候吧&#xff0c;这个有贼坑人&#xff0c;相信网络上有各种被中介坑的…