白帽子讲Web安全 札记

来源:互联网 发布:武汉seo公司 编辑:程序博客网 时间:2024/04/19 20:15

注入攻击的本质,是把用户输入的数据当代码执行。
这里有两个关键条件,第一个是用户能够控制输入,
第二个是原本程序要执行的代码,拼接了用户输入的数据。

如果服务器开启错误回显 , 会为攻击者提供极大的遍历。 错误回显披露了敏感信息,对攻击者来说,构造SQL注入的语句就可以更加得心应手。

通过SQL 执行 系统命令,是一个危险点。

建立数据库账户时,应该遵循最小权限原则。

数据库,操作系统,web应用程序应该统一字符集, 统一设置成UTF-8是一个好方法。

防御SQL注入的最佳方式是,使用预编译语句,绑定变量。

检查数据类型。 如 限制输入类型只能是 integer

防止SQL注入的一种方法,不要直接只用 外部的变量, 自己处理一下, 就可以过滤掉一些多余的内容。

数据与代码 分离 原则

文件上传漏洞
第一,上传的文件能够被web容器解释执行。
第二,用户能够从web上访问这个文件。
就相当于写了一个脚本,让服务器执行。

设计安全的文件上传功能
1,文件上传的目录设置为不可执行。
2,判断文件类型
3,使用随机数改写文件名和文件路径
4,单独设置文件服务器的域名

认证是 Authentication
授权是 Authorization

认证的目的是为了认出用户是谁
授权的目的是为了决定用户能够做什么

认证实际上是一个 验证凭证的过程。

如果只有一个凭证被用来认证,是单因素认证
如果有多个凭证被用来认证,是多因此认证。

一般来说,多因素认证的强度要高于 单因素认证,但在用户体验上,会带来一点不方便(麻烦)。

密码是最基础的认证手段。

密码的保存,密码必须以不可逆的加密算法,或者是单向散列函数算法,加密后存储在数据库中。
即使是网站的管理人员,也不能够看到用户的密码 ,这样黑客在入侵了网站,导出了数据库中的数据,也无法获取明文的密码。

密码被人修改 不及 密码被别人掌握者, 自己还不知道 可怕 。

彩虹表

为了抵抗彩虹表,在计算密码明文的哈希值时,增加一个Salt,来增加密码的复杂度。
MD5(passwd+salt)

salt应该妥善保管。

Session 与认证
最常见的做法就是把session 加密后保存在Cookie中。
session保持攻击,是通过不断的访问,让session不过期。

安全 和 用户体验有时候是 矛盾的。 用户不喜欢 不停的输入密码 ,可安全却需要这个。

使用Web框架

DDOS 拒绝服务攻击

验证码

资源耗尽攻击

PHP安全漏洞
1,文件包含漏洞
2,变量覆盖漏洞
globals
extract() 变量覆盖

永远不相信用户的输入。
Html encode

0 0
原创粉丝点击