每个开发人员都应该了解的安全基础知识
上周我发了这个帖子:
我想和大家分享一些很棒的答案。这里蕴含着丰富的智慧,请继续阅读。

- 不要相信任何人,尤其是你自己。
- 唯一绝对安全的系统是断开连接、关闭电源、用混凝土包裹,然后从蒙着眼睛的直升机上扔进海里的系统。
- 任何你能使用的功能,都有可能被别有用心的人利用。你可以通过你的系统访问的数据,也必然会被其他人通过你的系统访问。后门是一种固有的安全风险。
- 假设用户输入是恶意的,除非证明不是。
- 如果您足够优秀,能够开发自己的加密技术,那么您已经找到了一份专门从事加密技术的工作。
- 如果您只需要测试输入是否与您存储的内容(如密码)匹配,则进行哈希处理,不要加密。
- 绑定准备好的语句,不要将参数插入查询中。
- 如果您的网站有公开可见的 API 支持,请记住您的网站并不是唯一可以访问它的网站。
- 思考并测试边缘情况。
- 验证输入数据!
- 认真地验证输入数据。
- 我是否提到过验证输入数据?
存储的数据越少,您面临的安全隐患就越少,参与者的安全性也就越高。不要因为觉得数据有用而囤积数据——只保存必要的数据,并在每次需要的时候反思一下。
如果必须存储数据,尤其是敏感数据,千万不要以纯文本形式存储!可以研究一下像 bcrypt 这样的哈希算法。
始终为参与者提供删除其数据的选项,并在他们要求时实际删除它。
- 安全保障并非易事。值得阅读各种攻击案例,以了解攻击方式的严重程度。
- 您的系统将被攻破。缓解策略与“墙”同样重要。
- 系统永远不会“安全”,您只能在安全目标与当前风险和可用资源之间取得平衡。
- 隐私与安全密不可分。即使你不负责任,不关心你的用户,攻击者也会这么做。
- 随着数据价值的提升,安全保障也变得越来越难。大多数系统之所以安全,其实只是因为没有人真正需要它们存储的数据。随着公司的成功,攻击者也会随之而来。
- 安全是一个不断变化的目标。安全实施永无止境。
- 用户安全与企业安全同等重要。
- 公开安全是确保其正确性的唯一途径。隐晦不明并不能带来安全。
- 安全人人有责。每个人、每台机器都可能是潜在的攻击媒介。
实用建议:
- 使用现有库
- 遵循最佳实践
- 保持一切最新
- 保持开放态度并提出问题
- 防御性编码
- 注意风险
无论何时处理来自外部的数据,请始终按照以下顺序处理:
- 消毒
- 证实
- 执行
- 显示反馈
例子:
$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
说到基本面...
希望以上内容对您有所帮助。在安全方面,我们可以遵循许多具体的规则,但从原则入手才是关键。我们永远不能想当然地认为每个人都已经了解并掌握了基本原则。行动起来,保护您的软件安全吧!
文章来源:https://dev.to/ben/the-fundamentals-of-security-every-developer-should-understand-2m27