web安全规范

1      Web开发安全规范

1.1       Web应用程序体系结构和安全

 

 

HTTP 是无国界的,这意味着跟踪每位用户的会话状态将成为应用程序的责任。应用程序必须能够通过某种形式的身份验证来识别用户。由于所有后续授权决策都要基于用户的标识,因此,身份验证过程必须是安全的,同样必须很好地保护用于跟踪已验证用户的会话处理机制。由于输入和输出数据要在公共网络上进行传输,因此还会存在其他挑战。防止参数操作和敏感数据泄漏也是另外一些重要问题。

Web应用程序安全设计是根据应用程序漏洞类别进行组织的。针对问题提供安全方案,在此列出以下的常见漏洞以及防止方法。

    i.            输入验证*

存在风险:嵌入到查询字符串、表单字段、cookie 和 HTTP 头中的恶意字符串的攻击。这些攻击包括命令执行、跨站点脚本、SQL 注入和缓冲区溢出攻击。

防范策略:不要信任输入;应考虑集中式输入验证。不要依赖于客户端验证。注意标准化问题。限制、拒绝和净化输入。验证类型、长度、格式和范围。

  ii.            身份验证*

存在风险:标识欺骗、密码破解、特权提升和未经授权的访问。

防范策略:将站点分割为匿名区域、标识区域和通过身份验证的区域。使用强密码。支持密码有效期和帐户禁用。不要存储凭据(应使用带有 salt 的单向哈希)。加密通信通道,以保护身份验证令牌。

 iii.            授权验证*

存在风险:访问保密数据或受限数据、篡改数据以及执行未经授权的操作。

防范策略:使用最少特权帐户。考虑授权粒度。实施分别授权。限制用户访问系统级资源。

 iv.            配置管理

存在风险:对管理界面进行未经授权的访问、具有更新配置数据的能力以及对用户帐户和帐户配置文件进行未经授权的访问。

防范策略:使用最少特权进程和服务帐户。不要以纯文本形式存储凭据。在管理界面上使用强身份验证和授权。不要使用链路状态广播。远程管理时要确保通信通道的安全。避免在 Web 空间中存储敏感数据。

 

   v.            敏感数据

存在风险:泄露保密信息以及篡改数据。

防范策略:避免存储机密。对网络上传输的敏感数据进行加密。确保通信通道的安全。对敏感数据存储提供强访问控制。不要在永久性 cookie 中存储敏感数据。不要使用 GET 协议请求传递敏感数据。

 

 vi.            会话管理*

存在风险:捕捉会话标识符,从而导致会话劫持及标识欺骗。

防范策略:限制会话寿命。确保通道的安全。对身份验证 cookie 的内容进行加密。保护会话状态,以防止未经授权的访问。

 

vii.            加密管理

存在风险:访问保密数据或帐户凭据,或二者均能访问。

防范策略:不要自创加密算法。使用可靠并经过测试的平台功能。将未加密的数据存储在算法附近。使用正确的算法和密钥大小。避免密钥管理。定期回收密钥。在受限区域存储密钥。

 

viii.            参数操作

存在风险:路径遍历攻击、命令执行以及绕过访问控制机制,从而导致信息泄漏、特权提升和拒绝服务。

防范策略:对敏感的 cookie 状态加密。不要信任客户端可以操作的字段(如查询字符串、表单字段、cookie 或 HTTP 头)。验证从客户端发送的所有数据。

 

 ix.            上传文件风险

存在风险:上传脚本进行服务器攻击。

防范策略:前端控制上传的内容文件,后端检查文件的真实类型,文件改名,目录不放在web容器能直接访问的位置下。

 

   x.            异常处理*

存在风险:拒绝服务和敏感的系统级详细信息的泄漏。

防范策略:使用结构化的异常处理机制。不要泄漏敏感的应用程序实施细节。不要记录保密数据,如密码。考虑使用集中式的异常管理框架。

 

 xi.            记录处理*

存在风险:不能发现入侵迹象、不能验证用户操作,以及在诊断问题时出现困难。

防范策略:识别怀有恶意的行为。了解好的数据流应该是什么样子。在所有应用层中审核和记录活动。确保日志文件访问的安全。定期备份日志文件。

 

xii.            重复提交*

存在风险web前端数据请求或者表单提交往往通过对dom的点击事件来操作,但是往往因为人为点击过快,或者因为响应等待使得用户误人为没操作而重复很多次点击,造成表单数据的连续重复提交,造成用户体检的不好,甚至影响到整个系统的安全性。

防范策略:前端脚本控制,可以让前端提交表单的时候,只允许提交一次;也可以通过控制提交按钮,提交完之后,按钮不可用。服务器生成TOKEN存放到session中,并将session发送到客户端,以此来比对token是否一致,一致的话处理请求,不一致的话,不处理请求。

xiii.            数据链路传输安全控制*

存在风险数据的传输以明文的方式在网络上传递,很容易暴露各种信息,造成服务器处理异常,甚至崩溃。

存在风险数据的传输以明文的方式在网络上传递,很容易暴露各种信息,造成服务器处理异常,甚至崩溃。

 

 

 

 

1.2       Web安全编码规范

                    i.            区分公共区域和权限区域*

     公共区域允许任何用户进行匿名访问,权限区域能存在此权限的角色才可以访问,需要对系统进行粗力度的权限限制和细力度的权限控制,达到权限区域的访问安全,在敏感的区域还需进行身份的再次校验。

                  ii.            限制会话寿命和加密会话内容

     缩短会话寿命可以降低会话劫持和重复攻击的风险。会话寿命越短,攻击者捕获会话 cookie 并利用它访问应用程序的时间越有限。有加密的内容更难被获取到。

 

                iii.            不要向客户端暴露系统信息

发生故障时,暴露将会导致信息泄漏的消息。例如,不要暴露包括函数名以及调试内部版本时出问题的行数(该操作不应在生产服务器上进行)的堆栈跟踪详细信息。应向客户端返回一般性错误消息。开发定位主要看日志。WEB 服务器在接受用户登录请求时,不应区分登录失败的提示信息(如:用户名不存在、密码错误、密码已过期等) ,应采用统一的失败提示信息(如:错误的用户名或密码)

 

                iv.            记录详细的错误信息

 错误日志发送详细的错误消息。应该向服务或应用程序的客户发送最少量的信息,如一般性可读性错误消息和自定义无规则错误日志 ID,随后可以将这些信息映射到事件日志中的详细消息。

 

                  v.            防止堵塞性攻击

防止通过ip端进行多次访问一个功能造成队列的堵塞,对ip进行记录在短时间内进行的http连续请求进行拒绝回应。

 

                vi.            SQL 语句的参数应以变量形式传入

 

(1)       避免 XSS 注入(页面回显的 input text, input hidden 均过滤 <、>、"、' 等字符等)

(2)       使用随机键盘或者安全控件防止键盘木马记录用户的输入

(3)       若要在 Cookie 中写入数据,尽量使用 Cookie 的 HttpOnly 属性

(4)       响应中设置一些诸如 X-Frame-Options、X-XSS-Protection 等高版本浏览器支持的 HTTP 头

(5)       不管客户端是否做过数据校验,在服务端必须要有数据校验(长度、格式、是否必填等等)

(6)       SQL 语句采用 PreparedStatement 的填充参数方式,严禁使用字符串拼接 SQL 或者 HQL 语句

 

              vii.            数据保密性

只要比较机密的数据就要使用不可逆的加密算法进行加密,对于原文还需进行加salt操作防止被黑客攻破成功偶然性。

 

            viii.            禁止不需要的 HTTP 方法(遵守白名单的原则)

在无特定的需求情况下,应只开放 GET, HEAD, POST 等安全的 HTTP 方法,禁用 PUT, DELETE, OPTIONS 等具有操作性质的 HTTP 方法。减少GET方式的使用,要遵守白名单的原则。

 

                ix.            不要信任 HTTP 头信息

HTTP 头在 HTTP 请求和响应开始时发送。应确保Web应用程序的任何安全决策都不是基于 HTTP 头中包含的信息,因为攻击者很容易操作 HTTP 头。例如,HTTP 头中的“referer”字段包含发出请求的网页的 URL。不要基于“referer”字段值做出任何安全决策,以检查发出请求的页面是否由该 Web 应用程序生成,因为该字段很容易伪造。

                  x.            页面常规合法性的处理

正常页面输入框信息的判断(例如格式是否正确,长度是否合理)。页面中的非源代码内容,应该以 URI 编码后的字符出现,避免特殊字符直接出现在页面中。

1.3       Web部署window环境安全设置

    i.            账号管理认证授权

账号管理(在用户数量加多时须设置)

 

要求内容

按照用户分配账号。根据系统的要求,设定不同的账户和账户组,管理员用户,数据库用户,审计用户,来宾用户等。

操作指南

进入“控制面板->管理工具->计算机管理”,在“系统工具->本地用户和组”:根据系统的要求,设定不同的账户和账户组,管理员用户,数据库用户,审计用户,来宾用户。

检测方法

1、判定条件

结合要求和实际业务情况判断符合要求,根据系统的要求,设定不同的账户和账户组,管理员用户,数据库用户,审计用户,来宾用户。

2、检测操作

进入“控制面板->管理工具->计算机管理”,在“系统工具->本地用户和组”:查看根据系统的要求,设定不同的账户和账户组,管理员用户,数据库用户,审计用户,来宾用户。

 

认证*

 

要求内容

最短密码长度 6 个字符,启用本机组策略中密码必须符合复杂性要

求的策略。即密码至少包含以下四种类别的字符中的三种:

z 英语大写字母 A, B, C, … Z

z 英语小写字母 a, b, c, … z

z 西方阿拉伯数字 0, 1, 2, … 9

非字母数字字符,如标点符号, @, #, $, %, &, *等

操作指南

进入“控制面板->管理工具->本地安全策略”,在“帐户策略->密码策略”:“密码必须符合复杂性要求”选择“已启动

检测方法

1、判定条件

“密码必须符合复杂性要求”选择“已启动”

2、 检测操作

进入“控制面板->管理工具->本地安全策略”,在“帐户策略->密码策略”:查看是否“密码必须符合复杂性要求”选择“已启动”

 

要求内容

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过 6 次(不含 6 次),锁定该用户使用的账号。

操作指南

进入“控制面板->管理工具->本地安全策略”,在“帐户策略->帐户锁定策略”:“账户锁定阀值”设置为 6 次

检测方法

1、判定条件

“账户锁定阀值”设置为小于或等于 6 次

2、检测操作

进入“控制面板->管理工具->本地安全策略”,在“帐户策略->帐户锁定策略”:查看是否“账户锁定阀值”设置为小于等于 6 次

 

授权(不同角色分配不同权限)*

 

要求内容

在本地安全设置中从远端系统强制关机只指派给 Administrators组。

操作指南

进入“控制面板->管理工具->本地安全策略”,在“本地策略->用户权限分配”:“从远端系统强制关机”设置为“只指派给 Administrators 组”。

检测方法

1、判定条件

“从远端系统强制关机”设置为“只指派给 Administrtors 组”

2、检测操作

进入“控制面板->管理工具->本地安全策略”,在“本地策略->用户权限分配”:查 看 是 否 “ 从 远 端 系 统 强 制 关 机 ” 设 置 为 “ 只 指 派 给Administrators 组”

 

  ii.            IP 协议安全配置操作

要求内容

必须开启自带的防火墙(必选)。对没有自带防火墙的 Windows 系统,启用 Windows 系统的 IP 安全机制(IPSec)或网络连接上的 TCP/IP 筛选,只开放业务所需要的TCP, UDP 端口和 IP 协议。

操作指南

1、进入“控制面板”->“系统和安全”->“windows防火墙”->“打开或者关闭防火墙”->“启用wondows防火墙”(必选)。

2、进入“控制面板->“网络和Internet” -> “查看网络状态和任务”,进入“ Internet 协议( TCP/IP)属性->高级 TCP/IP 设置”,在“选项”的属性中启用网络连接上的 TCP/IP 筛选,只开放业务所需要的IP 协议(可选)。

检测方法

1、  判定条件

    查看防火墙是否时开启的选项。

系统管理员出示业务所需端口列表。

根据列表只开放系统与业务所需端口。

2、检测操作

进入“控制面板->“网络和Internet” -> “查看网络状态和任务”,进入“ Internet 协议( TCP/IP)属性->高级 TCP/IP 设置”,在“选项”的属性中启用网络连接上的 TCP/IP 筛选,查看是否只开放业务所需要的 IP 协议。

 

 iii.            其他相关设置

启动项:

 

要求内容

列出系统启动时自动加载的进程和服务列表,不在此列表的需关闭。

操作指南

“开始->运行->MSconfig”启动菜单中,取消不必要的启动项。

检测方法

1、判定条件

不需要的自动加载进程通过“开始->运行->MSconfig”启动菜单中取消。

2、检测操作

系统管理员提供业务必须的自动加载进程和服务列表文档。查看 “开始->运行->MSconfig”启动菜单。

 

共享文件设置:

 

要求内容

查看每个共享文件夹的共享权限,只允许授权的账户拥有权限共享此文件夹。

操作指南

进入“控制面板->管理工具->计算机管理”,进入“系统工具->共享文件夹”:查看每个共享文件夹的共享权限,只将权限授权于指定账户。

检测方法

1、判定条件

查看每个共享文件夹的共享权限仅限于业务需要,不设置成为“ everyone”。

2、检测操作

进入“控制面板->管理工具->计算机管理”,进入“系统工具->共享文件夹”:查看每个共享文件夹的共享权限。

 

远程时效性设置*

 

要求内容

对于远程登陆的帐号,设置不活动断连时间 15 分钟。

操作指南

进入“控制面板->管理工具->本地安全策略”,在“本地策略->安全选项”:“Microsoft 网络服务器”设置为“在挂起会话之前所需的空闲时间”为 15 分钟

检测方法

1、判定条件

“Microsoft 网络服务器”设置为“在挂起会话之前所需的空闲时间”为 15 分钟。

2、检测操作

进入“控制面板->管理工具->本地安全策略”,在“本地策略->安全选项”:查看是否“Microsoft 网络服务器”设置为“在挂起会话之前所需的空闲时间”为 15 分钟

 

日志配置操作*

 

要求内容

设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,以及远程登录时,用户使用的 IP 地址。

操作指南

开始->运行-> 执行“ 控制面板->管理工具->本地安全策略->审核策略”审核登录事件,双击,设置为成功和失败都审核。

检测方法

1、判定条件

审核登录事件,设置为成功和失败都审核。

2、检测操作

开始->运行-> 执行“ 控制面板->管理工具->本地安全策略->审核策略”审核登录事件,双击,查看是否设置为成功和失败都审核。

 

1.4       Web部署LINUX环境安全设置

i.账号管理认证授权

用户口令设置

 

要求内容

帐号与口令安全的设置

操作指南

1、询问管理员是否存在如下类似的简单用户密码配置,比如: root/root, test/test, root/root1234 

2、执行:more /etc/login.defs,检查

PASS_MAX_DAYS/PASS_MIN_LEN/PASS_MIN_DAYS/PASS_WARN_AGE参数 , 至少PASS_MIN_LEN=8。

检测方法

建议在/etc/login.defs文件中配置:PASS_MIN_LEN=8 不允许存在简单密码,密码设置符合策略,如长度至少为8 不存在空口令账号 

 

用户远程登录限制

 

要求内容

帐号与口令-root用户远程登录限制

操作指南

执行:more /etc/securetty,检查Console参数,建议在/etc/securetty文件中配置:CONSOLE tty01

检测方法

查看securetty文件是否包含tty01

 

远程连接的安全性配置

 

要求内容

帐号与口令-远程连接的安全性配置

操作指南

执行:find  / -name  .netrc,检查系统中是否有.netrc文件, 执行:find  / -name  .rhosts ,检查系统中是否有.rhosts文件,返回值不包含内容

检测方法

运行上面语句,无返回值则符合安全配置

 

 

ii.系统状态

 

用户远程登录限制

 

要求内容

系统文件-系统core dump状态

操作指南

执行:more /etc/security/limits.conf 检查是否包含下列项: * soft core 0  

检测方法

运行上面语句,若不存在,则低于安全要求 

 

 

iii.Ip端口设置

要求内容

只开放需要访问的端口

操作指南

1、vi /etc/sysconfig/iptables

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙)

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙)

特别提示:很多同事把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,正确的应该是添加到默认的22端

2、重启防火墙使配置生效 /etc/init.d/iptables restart  

检测方法

查看/etc/sysconfig/iptables文件,查看是否配置 

转载于:https://my.oschina.net/u/3745429/blog/1595882

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值