标签 安全 下的文章

思考一下,如何在你的开源项目中真正定义安全性吧。

科技行业以创造“热词”而小有名气,当然,其他行业也是如此。譬如,“故事驱动”和“轻规则”是当下流行的桌游概念,“解构”的汉堡和墨西哥卷饼在高级餐厅颇受欢迎。然而,技术热词的问题在于,它们可能直接影响你的生活。当某人标榜应用程序“安全”,以此来吸引你使用他们的产品,产品实际上是在暗示一种承诺:“安全”的含义就是它是安全的,它值得你的使用与信任。但问题是,“安全”这个词可能指的是许多事情,技术行业常将它用作一个过于泛化的术语,以至于它逐渐失去了实际含义。

由于“安全”一词可能含义丰富,也可能一无是处,使用它就需要慎之又慎。事实上,最好是尽量避免使用这个词,取而代之的是,诉诸你真正要表达的东西。

当 “安全” 意味着加密

有时候,“安全” 会被作为 加密 的非常不明确的简短表述。在这种情况下,“安全” 指的是,对于外部观察者想要窃听你的数据,要经过一定的困难。

避免这样表述:“本网站稳如磐石且安全无忧。”

听起来很棒?你可能会想象一个拥有多重二次验证、零知识证明数据存储以及坚决的匿名策略的网站。

你可以这么说:“本网站承诺有 99% 的在线时间,并且其流量都通过 SSL 进行加密和验证。”

这样一来,承诺的含义变得清晰了,同时也明确了实现 “安全” 的方法(即使用 SSL)以及 “安全“ 的作用范围是什么。

注意,这里并未对隐私或匿名做出任何明确的承诺。

当 “安全” 意味着访问限制

有时,“安全” 这个词是指应用程序或设备的访问权限。如果没有明确的解释,“安全” 可能涵盖从无效的“隐蔽即安全”模式,到简单的 htaccess 密码,直到生物识别扫描器等各种概念。

避免这样表述:“我们已经为你防护好了系统。”

你可以这么说:“我们的系统采用了二步验证法。”

当 “安全” 意味着数据存储

“安全” 这个词也可以指你的数据在服务器或设备上的储存方法。

避免这样表述:“这个设备在数据存储上考虑了安全因素。”

你可以这么说:“这个设备利用全盘加密技术来保护你的数据。”

当提到远程存储时,“安全” 可能更多指的是谁可以访问存储数据。

避免这样表述:“你的数据是安全的。”

你可以这么说:“你的数据经过 PGP 加密,仅你持有私钥。”

当 “安全” 意味着隐私

今天,“隐私” 一词几乎和 “安全” 一样宽泛且模糊。一方面,“安全” 似乎必然就涉及 “隐私”,然而,这仅在 '安全' 有明确定义时才成立。是因为设有密码阻止外人进入所以称之为私有吗?还是因为数据已加密且仅你拥有密钥所以归为私有?又或者,由于存储你数据的厂商除了 IP 地址外对你一无所知,这才算是私有?光是口头声明 “隐私”,就像未经说明就声明 “安全” 一样,是不够的。

避免这样表述:“你的数据在我们这里是安全的。”

你可以这么说:“你的数据经 PGP 加密,且只有你拥有私钥。我们不需要你的任何个人信息,唯一能识别你的只有你的 IP 地址。”

一些网站会声明 IP 地址在日志中保留期限,及非经法律授权绝不向执法部门交出用户数据等诸多承诺。虽然这些并不属于技术 “安全” 的范畴,但它们全都涉及的是信任度,你不能将这些看作是技术规格。

明确所说

科技是个复杂的话题,极易引发混淆。沟通是至关重要的,虽然有时候简拼和专有名词在某些场合可能管用,但通常来说,讲明白总是比较好的。当你对你的项目的 “安全” 感到自豪,不要只用模糊的词语进行简述。向其他人明确你具体做了什么来保护你的用户,同时也要明确你认为哪些事物已超出你的考量范围,并要经常进行这样的沟通。“安全” 是个好特点,但它的涵盖面过广,所以请勿畏于夸赞自己在某个具体方向上的特别之处。

(题图:MJ/b8cc54ee-5556-4106-b9fa-b08539452aa7)


via: https://opensource.com/article/22/9/security-buzzword-alternatives

作者:Seth Kenlon 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

getline() 提供了一种更灵活的方法,可以在不破坏系统的情况下将用户数据读入程序。

在 C 语言中读取字符串是一件非常危险的事情。当读取用户输入时,程序员可能会尝试使用 C 标准库中的 gets 函数。它的用法非常简单:

char *gets(char *string);

gets() 从标准输入读取数据,然后将结果存储在一个字符串变量中。它会返回一个指向字符串的指针,如果没有读取到内容,返回 NULL 值。

举一个简单的例子,我们可能会问用户一个问题,然后将结果读入字符串中:

#include <stdio.h>
#include <string.h>

int main()
{
  char city[10]; // 例如 "Chicago"

  // 这种方法很糟糕 .. 不要使用 gets

  puts("Where do you live?");
  gets(city);

  printf("<%s> is length %ld\n", city, strlen(city));

  return 0;
}

输入一个相对较短的值就可以:

Where do you live?
Chicago
<Chicago> is length 7

然而,gets() 函数非常简单,它会天真地读取数据,直到它认为用户完成为止。但是它不会检查字符串是否足够容纳用户的输入。输入一个非常长的值会导致 gets() 存储的数据超出字符串变量长度,从而导致覆盖其他部分内存。

Where do you live?
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
<Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch> is length 58
Segmentation fault (core dumped)

最好的情况是,覆盖部分只会破坏程序。最坏的情况是,这会引入一个严重的安全漏洞,恶意用户可以通过你的程序将任意数据插入计算机的内存中。

这就是为什么在程序中使用 gets() 函数是危险的。使用 gets(),你无法控制程序尝试从用户读取多少数据,这通常会导致缓冲区溢出。

安全的方法

fgets() 函数历来是安全读取字符串的推荐方法。此版本的 gets() 提供了一个安全检查,通过仅读取作为函数参数传递的特定数量的字符:

char *fgets(char *string, int size, FILE *stream);

fgets() 函数会从文件指针读取数据,然后将数据存储到字符串变量中,但最多只能达到 size 指定的长度。我们可以更新示例程序来测试这一点,使用 fgets() 而不是 gets()

#include <stdio.h>
#include <string.h>

int main()
{
    char city[10]; // 例如 "Chicago"

    puts("Where do you live?");

    // fgets 虽好但是并不完美
    fgets(city, 10, stdin);

    printf("<%s> is length %ld\n", city, strlen(city));

    return 0;
}

如果编译运行,你可以在提示符后输入任意长的城市名称。但是,程序只会读取 size = 10 数据存储到字符串变量中。因为 C 语言在字符串末尾会添加一个空(\0)字符,这意味着 fgets() 只会读取 9 个字符到字符串中。

Where do you live?
Minneapolis
<Minneapol> is length 9

虽然这肯定比 fgets() 读取用户输入更安全,但代价是如果用户输入过长,它会“切断”用户输入。

新的安全方法

更灵活的解决方案是,如果用户输入的数据比变量可能容纳的数据多,则允许字符串读取函数为字符串分配更多内存。根据需要调整字符串变量大小,确保程序始终有足够的空间来存储用户输入。

getline() 函数正是这样。它从输入流读取输入,例如键盘或文件,然后将数据存储在字符串变量中。但与 fgets()gets() 不同,getline() 使用 realloc() 调整字符串大小,确保有足够的内存来存储完整输入。

ssize_t getline(char **pstring, size_t *size, FILE *stream);

getline() 实际上是一个名为 getdelim() 的类似函数的装饰器,它会读取数据一直到特殊分隔符停止。本例中,getline() 使用换行符(\n)作为分隔符,因为当从键盘或文件读取用户输入时,数据行由换行符分隔。

结果证明这是一种更安全的方法读取任意数据,一次一行。要使用 getline(),首先定义一个字符串指针并将其设置为 NULL ,表示还没有预留内存,再定义一个 size_t 类型的“字符串大小” 的变量,并给它一个零值。当你调用 getline() 时,你需要传入字符串和字符串大小变量的指针,以及从何处读取数据。对于示例程序,我们可以从标准输入中读取:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  char *string = NULL;
  size_t size = 0;
  ssize_t chars_read;

  // 使用 getline 读取长字符串

  puts("Enter a really long string:");

  chars_read = getline(&string, &size, stdin);
  printf("getline returned %ld\n", chars_read);

  // 检查错误

  if (chars_read < 0) {
    puts("couldn't read the input");
    free(string);
    return 1;
  }

  // 打印字符串

  printf("<%s> is length %ld\n", string, strlen(string));

  // 释放字符串使用的内存

  free(string);

  return 0;
}

使用 getline() 读取数据时,它将根据需要自动为字符串变量重新分配内存。当函数读取一行的所有数据时,它通过指针更新字符串的大小,并返回读取的字符数,包括分隔符。

Enter a really long string:
Supercalifragilisticexpialidocious
getline returned 35
<Supercalifragilisticexpialidocious
> is length 35

注意,字符串包含分隔符。对于 getline(),分隔符是换行符,这就是为什么输出中有换行符的原因。 如果你不想在字符串值中使用分隔符,可以使用另一个函数将字符串中的分隔符更改为空字符。

通过 getline(),程序员可以安全地避免 C 编程的一个常见陷阱:你永远无法知道用户可能会输入哪些数据。这就是为什么使用 gets() 不安全,而 fgets() 又太笨拙的原因。相反,getline() 提供了一种更灵活的方法,可以在不破坏系统的情况下将用户数据读入程序。

(题图:MJ/4b23132f-8916-42ae-b2da-06fd2812bea8)


via: https://opensource.com/article/22/5/safely-read-user-input-getline

作者:Jim Hall 选题:lkxed 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

日本表示版权不适用于 AI 训练

日本政府最近重申,它不会对用于人工智能培训的数据实施版权。该政策允许人工智能使用任何数据,“无论它是出于非营利还是商业目的,无论它是复制以外的行为,还是从非法网站或其他地方获得的内容”。日本政府认为版权方面的担忧,特别是与动漫和其他视觉媒体有关的担忧,阻碍了该国在人工智能技术方面的进步。

消息来源:Technomancers
老王点评:关于 AI 和版权,这确实是一个值得思考的领域。如果 AI 只能使用公共数据训练,显然会影响 AI 的结果。现在非英语的训练语料显然要比英语语料少得多,日本的这个做法值得参考。

荷兰政府网站必须强制遵守 security.txt 标准

荷兰国家政府数字信任中心宣布,荷兰政府网站从 5 月 25 日开始必须强制遵守 security.txt 标准。Web 服务器上的 security.txt 包含了联系信息,允许道德黑客在服务器上发现漏洞之后可以立即联络合适的人去修复,从而减少网络犯罪分子利用漏洞的机会。目前有逾 8.8 万个荷兰域名有 security.txt 文件。

消息来源:Postsen
老王点评:这种行业规范确实需要国家来推动才好。

Reddit 也准备对 API 收费,杀死第三方客户端

继 Twitter 之后,Reddit 最近修改了 API 政策,计划对 API 访问收费。开发者发现 Reddit 给出了一份无法接受的报价,5000 万次请求 1.2 万美元,这意味着第三方客户端除了关闭别无选择。当然,Reddit 认为相比 Twitter 的 5000 万推文 4.2 万美元 API 定价要合理的多。和 Twitter 的情况类似,第三方客户端一大优势也是不展示 Reddit 的广告。

消息来源:Reddit
老王点评:只是计较于第三方客户端占据了本应展示的广告量,却忘记了第三方客户端给生态带来的好处。

回音

  • 在 ChatGPT 杜撰 了 6 个案例之后,美国得州的一位法官禁止递交 AI 撰写的材料,除非其正确性经过了人类验证。并要求律师递交保证书,证明其递交的文件是人类撰写或经过了人类的审核。

微软正在研究使 Linux 脚本更安全

在本周的 Linux 安全峰会上,systemd 的创建者 Lennart Poettering 发表了演讲,他在过去的一年中被微软雇佣,他和微软的其它工程师们正在努力提高 Linux 的安全性。微软的工程师发表的演讲介绍了他们如何在 Linux 系统上控制脚本执行的新方法。从新的 open() 标志到新的内核系统调用,他们正在努力让 Linux 系统管理员对未来在 Linux 系统上执行的脚本有更大的控制。

消息来源:Phoronix
老王点评:这有点讽刺,但事实就是这样。

观点:只有云计算供应商才能做好安全工作

有专家认为,“旧的论点认为,云计算的利润率最终会使企业内部的 IT 基础设施看起来是更便宜的选择,但却没有预见到一个时代,即安全变得如此困难,只有云计算供应商才能把它做好。”在安全问题上,云计算供应商有一个关键的优势:他们控制、编写和构建了大部分的软件和硬件堆栈。云计算供应商在网络安全方面拥有令人羡慕的记录,这要归功于谷歌之类的云计算供应商的持续补丁等严格的安全实践。

消息来源:eSecurity Planet
老王点评:虽然云计算供应商也动不动就出些大事故,但一般而言,云计算供应商的安全实践能力要超过普通的 IT 公司。

裁员时拥有开源和 Linux 技能比较安全

Linux 基金会的调查显示,虽然科技行业进行了几轮裁员,但“开源是与这些趋势反周期的”。事实上,更多的组织计划增加他们的技术人员水平而不是减少。对技术人才的需求仍然强劲,特别是在快速发展的领域,它们都严重依赖开源和 Linux 技术。Linux 基金会发现高级技术职位的裁员幅度最大,新的招聘主要集中在开发人员和 IT 经理。此外,Linux 基金会的研究显示,提高技能(91%)和认证(77%)比大学教育(58%)更重要。

消息来源:ZDNet
老王点评:也就是说,懂技术还是比较有保障一些。

AI 生成了 “活” 在虚拟世界的 25 个虚拟人

据最近发表的一篇论文,研究人员利用 ChatGPT 生成了 25 个 “活” 在类似《虚拟人生》游戏里的角色,运用大语言模型存储、合成和应用相关记忆去生成可信行为。观察者可以在这个网页游戏中观察这些角色,查看他们的文字记忆和其他信息。这些角色计划他们的日子、分享新闻、形成关系,并协调团体活动。他们相互沟通,产生了研究人员所描述的“涌现”行为。比如说他们会组成团体参与“市长竞选”,也会组织聚会,并有一些人因为种种原因而没到场。

消息来源:The Register
老王点评:这些生活在沙盒游戏中的角色,应该并不知道自己只是一个 AI 驱动的角色,或许有一天他们会怀疑。而我们,已经开始怀疑了?

谷歌免费推出保障开源软件服务

大约一年前,谷歌宣布了其保障开源软件服务,这项服务通过定期扫描和分析一些世界上最流行的软件库的漏洞,帮助开发者防御供应链安全攻击。现在谷歌免费推出了该服务,支持超过 1000 个 Java 和 Python 软件包。谷歌承诺,它将不断保持这些库的更新(不创建分叉),扫描漏洞并修复,然后贡献给上游。谷歌说,在首次推出 250 个 Java 库的服务时,它发现并修复了这些库的 48% 的新 CVE 漏洞。

消息来源:Tech Crunch
老王点评:这件事上,谷歌功莫大焉!

DDoS 攻击转向利用 VPS 以提高威力

Cloudflare 称,较新的一代僵尸网络逐渐放弃了建立由单独的弱小物联网设备组成的大群的战术,现在正转向利用泄露的 API 凭证或已知的漏洞奴役脆弱和配置错误的 VPS 服务器。这种方法有助于威胁者更容易、更迅速地建立高性能僵尸网络,其强度可达基于物联网的僵尸网络的 5000 倍。

消息来源:Bleeping Computer
老王点评:蜂群战术换成了僵尸大军,就问你怕不怕。

德国法院裁定 Youtube-DL 的托管商败诉

德国法院已经命令托管服务商 Uberspace 将开源的 YouTube-DL 软件的网站下线。该裁决是由索尼、华纳和环球公司去年提起的版权侵权诉讼的结果,他们称,“YouTube-DL 的服务使用户可以在不付费的情况下翻录流媒体和下载受版权保护的音乐。”。Uberspace 将对判决提出上诉,他们认为,“该命令实际上相当于对 YouTube-DL 的全面禁止,没有考虑到该软件的潜在合法用途。”与此同时,Youtube-DL 的代码仍然可以在 GitHub 上找到。需要提及的是,原始版本的 YouTube-DL 在 GitHub 上的最后一个发布版本是 2021 年底发布的。而一些复刻版本还在继续活跃。

消息来源:Torrent Freak
老王点评:不知道下一步这个压力是否就会转移到 GitHub,比如不允许发布构建版本。

斯坦福大学发布人工智能状况报告

虽然现在人工智能发展之快,让任何与人工智能有关的报告一发布就面临过期的风险,但是我们仍然能从这份 386 页的 报告 中得到一些有用的信息:

  • 在过去的十年里,人工智能的发展已经从学术界主导翻转到了工业界主导,而且这没有改变的迹象。
  • 在传统基准上测试模型正变得困难,这里可能需要一种新的模式。
  • 人工智能训练和使用的能源占用正在变得相当大,但我们还没有看到它如何在其他地方增加效率。
  • 与人工智能相关的技能和工作岗位正在增加,但没有你想象的那么快。
  • 政策制定者们正在努力编写一个明确的人工智能法案,如果有的话,这是一个愚蠢的差事。
  • 投资已经暂时停滞,但这是在过去十年的天文数字般的增长之后。
  • 超过 70% 的中国、沙特和印度受访者认为人工智能的好处多于坏处。美国人呢?35%。
消息来源:Tech Crunch
老王点评:你看出来这些结论哪些不正确或不太正确吗?

采用通用密码的车库门设备

一个市场领先的车库门控制器充满了严重的安全和隐私漏洞。这些设备都采用了相同的容易找到的通用密码来与服务器进行通信,它也会广播未加密的电子邮件地址、设备 ID 以及开关门等信息。估计有超过 4 万台设备受到影响,这些设备位于住宅和商业地产中。任何有一定技术背景的人都可以在设备厂商的服务器上搜索到指定的电子邮件地址、设备 ID 或名称,然后向相关控制器发出指令。

消息来源:Ars Technica
老王点评:虽然我没车库,但是我依然惊讶于现在还有这样对安全毫无意识的厂家。