每个开发人员都应该了解的安全基础知识

2025-05-24

每个开发人员都应该了解的安全基础知识

上周我发了这个帖子:

我想和大家分享一些很棒的答案。这里蕴含着丰富的智慧,请继续阅读。

  1. 不要相信任何人,尤其是你自己。
  2. 唯一绝对安全的系统是断开连接、关闭电源、用混凝土包裹,然后从蒙着眼睛的直升机上扔进海里的系统。
  3. 任何你能使用的功能,都有可能被别有用心的人利用。你可以通过你的系统访问的数据,也必然会被其他人通过你的系统访问。后门是一种固有的安全风险。
  4. 假设用户输入是恶意的,除非证明不是
  5. 如果您足够优秀,能够开发自己的加密技术,那么您已经找到了一份专门从事加密技术的工作。
  6. 如果您只需要测试输入是否与您存储的内容(如密码)匹配,则进行哈希处理,不要加密。
  7. 绑定准备好的语句,不要将参数插入查询中。
  8. 如果您的网站有公开可见的 API 支持,请记住您的网站并不是唯一可以访问它的网站
  9. 思考并测试边缘情况。
  1. 验证输入数据!
  2. 认真地验证输入数据。
  3. 我是否提到过验证输入数据?

存储的数据越少,您面临的安全隐患就越少,参与者的安全性也就越高。不要因为觉得数据有用而囤积数据——只保存必要的数据,并在每次需要的时候反思一下。

如果必须存储数据,尤其是敏感数据,千万不要以纯文本形式存储!可以研究一下像 bcrypt 这样的哈希算法。

始终为参与者提供删除其数据的选项,并在他们要求时实际删除它。

  • 安全保障并非易事。值得阅读各种攻击案例,以了解攻击方式的严重程度。
  • 您的系统将被攻破。缓解策略与“墙”同样重要。
  • 系统永远不会“安全”,您只能在安全目标与当前风险和可用资源之间取得平衡。
  • 隐私与安全密不可分。即使你不负责任,不关心你的用户,攻击者也会这么做。
  • 随着数据价值的提升,安全保障也变得越来越难。大多数系统之所以安全,其实只是因为没有人真正需要它们存储的数据。随着公司的成功,攻击者也会随之而来。
  • 安全是一个不断变化的目标。安全实施永无止境。
  • 用户安全与企业安全同等重要。
  • 公开安全是确保其正确性的唯一途径。隐晦不明并不能带来安全。
  • 安全人人有责。每个人、每台机器都可能是潜在的攻击媒介。

实用建议:

  • 使用现有库
  • 遵循最佳实践
  • 保持一切最新
  • 保持开放态度并提出问题
  • 防御性编码
  • 注意风险

无论何时处理来自外部的数据,请始终按照以下顺序处理:

  1. 消毒
  2. 证实
  3. 执行
  4. 显示反馈

例子:


$errors = array();

// 1. Sanitisation
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

// 2. Validation
if (false === filter_var($email, FILTER_VALIDATE_EMAIL)) {
   $errors['email'] =  "Invalid email address";
}

// 3. Exécution
if (count($errors)> 0){
    echo 'There are errors : ';
    print_r($errors);
    exit;
}
// At this point, all is fine, let's open the gate...
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
//...

// 4. Feedback information
Enter fullscreen mode Exit fullscreen mode

说到基本面...

希望以上内容对您有所帮助。在安全方面,我们可以遵循许多具体的规则,但从原则入手才是关键。我们永远不能想当然地认为每个人都已经了解并掌握了基本原则。行动起来,保护您的软件安全吧!

文章来源:https://dev.to/ben/the-fundamentals-of-security-every-developer-should-understand-2m27
PREV
我们花了大约五分钟的时间和十行代码将 vendor.js 从 210kb 缩减到 16kb
NEXT
成功软件职业的五大支柱