web攻击与防御


跨站脚本攻击

形式

  • 直接脚本植入

  • 埋置脚本陷阱

影响

  • 利用虚假输入表单骗取用户个人信息

  • 窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求

  • 插入伪造的文章或图片

案例

获取用户账号密码

获取用户cookie信息

防御

  • 设置X-XSS-Protection头

  • 对cookie中设置httponly

  • xss filter(检查输入,设置白名单)

  • 输出检查(编码、转义,常用编码:html编码,js编码,16进制等)

  • 针对不同位置的输出,使用不同的处理方式

  • 处理富文本

  • header中使用content-Sencurity-Policy字段,规定请求js的域名白名单(CSP策略)

跨站请求伪造

形式

  • 通过设置好的陷阱,强制对认证的用户进行非预期的状态更新

影响

  • 利用已通过认证的用户权限更新设定信息等

  • 利用已通过认证的用户权限购买商品

  • 利用已通过认证的用户权限在留言板上发表言论

案例

防御

  • 检查Referer字段

  • 添加校验token

  • 在 HTTP头中自定义属性并验证(改动很大,代价较高)

点击劫持

形式

  • 利用透明按钮或链接做陷阱,覆盖在Web页面上,诱使用户点击

影响

  • 用户在不知情的情况下,执行了非预期和破坏性的操作

案例

防御

  • 设置X-FRAME-OPTIONS头

  • 对于Firefox的用户,使用NoScript扩展

  • javascript禁止内嵌(有局限性)

会话劫持

形式

  • 通过非正规的生成方法推测会话ID

  • 通过窃听或XSS攻击盗取会话ID

  • 通过会话固定攻击强行获取会话ID

影响

  • 伪装成用户登录,进行破坏性操作

案例

防御

  • 对cookie中设置httponly,防止会话id被窃取

  • 验证HTTP头部信息,检测请求一致性

  • 关闭透明化SessionID(不用Cookie存放SessionID,用URL传递)

  • 定时更新Session名称

会话固定攻击

形式

  • 预先准备好会话id,诱使用户使用和认证,实现身份窃取

影响

  • 伪装成用户登录,进行破坏性操作

案例

防御

  • 每当用户登陆的时候就进行重置sessionID

  • sessionID闲置过久时,进行重置sessionID

  • 大部分防止会话劫持的方法对会话固定攻击同样有效(结合使用)

DoS攻击

形式

  • 集中请求,造成服务器资源过载(服务器很难分辨正常请求和攻击请求)

  • 攻击安全漏洞使服务停止

影响

  • 造成web应用服务瘫痪

案例

防御

  • 隐藏服务器的真实IP地址

  • 过滤不必要的服务和端口

  • 异常流量的清洗过滤

  • 分布式集群防御

SQL注入攻击

形式

  • 利用查询参数,干扰SQL执行

影响

  • 非法查看或篡改数据库内的数据

  • 规避认证

  • 执行和数据库服务器业务关联的程序等

案例

数据库表结构

查询干扰

防御

  • 不要使用动态SQL

  • 不要将敏感数据保留在纯文本中

  • 限制数据库权限和特权

  • 避免直接向用户显示数据库错误

  • 对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)

  • 定期测试与数据库交互的Web应用程序

  • 将数据库更新为最新的可用修补程序

OS命令注入攻击

形式

  • 利用命令参数,干扰OS执行

影响

  • 窃取和破坏操作系统文件

案例

防御

  • 采用白名单,或使用正则表达式进行过滤和校验

  • 不要让用户可以直接控制eval()、system、exec、shell_exec等函数的参数

  • 在进入执行命令函数和方法前,对变量进行过滤,对敏感字符进行转义

HTTP首部注入攻击

形式

  • 通过在响应首部字段内插入换行,添加任意响应首部或主体

影响

  • 设置任何Cookie信息

  • 重定向至任意URL

  • 显示任意的主体(HTTP响应截断攻击)

案例

首部注入攻击

响应截断攻击

防御

  • 创建安全字符白名单,只接受白名单中的字符出现在HTTP响应头文件中

  • 在将数据传送到http响应头之前,删除所有的换行符

  • 使用服务器端验证机制,并禁止全部用户在任何与响应头有关的输入请求中使用回车换行符(即CRLF)

  • 对用户的数据进行合法性校验,对特殊的字符进行编码

  • 将用户数据放入uri之前应充分过滤,避免特殊字符

邮件首部注入攻击

形式

  • 利用非法内容,实现恶意注入

影响

  • 对任意邮件地址发送广告邮件或病毒邮件

案例

防御

  • 使用正则表达式来过滤用用户提交的数据

  • 使用外部组件和库,提供防范这个问题像 ZEND mail、PEAR mail和swift mailer

  • ModSecurity可以阻止服务器级别的电子邮件注入

文件目录遍历攻击

形式

  • 通过非法截断其目录路径,实现文件访问

影响

  • 非法浏览、篡改或删除Web服务器上的文件

案例

防御

  • 合理配置Web服务器的目录权限

  • 尽可能采用白名单的形式,验证所有的输入

  • 对用户的输入进行验证,特别是路径替代字符如“../”和“~/”

  • 当程序出错时,不要显示内部相关配置细节

  • 净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝

  • 使用chrooted环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,使其即使越权也在访问目录之内