网站代码安全编写注意事项
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
敏感操作之前对身份进行重新判定,检查攻击者无法伪造的内容。 降低应用可能带来的问题,提高应用模块中对操作与权限的判断,减少应用中的 漏洞。关键功能操作页面都将进行身份校验
敏感数据保存
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
对于用户名、密码等数据,一般也要保存于数据库中,一旦数据库被攻破,此类 数据将全部暴露。 设计模式检查、数据库浏览 用户的登录密码在数据库中以明文存储,或者以简单加密算法存储(根据明密文 比较可知算法)
1. 仔细检查 web 网站目录,所有可直接下载的文件。 仔细检查所有的程序目录,删除无用文件
是否存在系统默认的文件
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
由于系统安装配置时的问题,一些例子、教程被攻击者访问到。 由于一些例子功能过于强大(修改数据、浏览服务器资源等),可能被利用。 漏洞扫描、文件浏览 这些内容可能在安装插件时产生。
跨站脚本
说明 检测方法 可能存在的现 象
是否存在 设计方解释 解决方案
规避方法
应用模块将用户输入展示在网页中,用户输入可能包含干扰浏览器的内容 漏洞扫描、代码检查 部分请求字段处理时,不对 HTML 的标志符(<,>)或其变形进行检查。攻击者可能 有如下举动: 1. 针对页面直接的文字,使用完整的<,> 2. 针对在 HTML tag 中显示的文字,使用不完整<,> 3. 不带<,>有可能执行跨站脚本
4、 对用户实行角色和权限的分层管理,采用分类授权,权限校验等技术保证网络的安全和
实际使用中的安全。
用户登陆均会进行身份验证,防止非法人员登陆后台管理系统。
5、 必要时系统采用 SSL 协议,对传输的数据进行加密保护。
6、 系统将用户在页面上录入的密码传输至专用加密类,由特殊的加密类进行加密保护。
7、 通过防火墙屏蔽内往所有数据库服务器的 Internet 连接,防止建立反向连接后门、跳板 通道、以及下载有害文件;
通过 WEB 服务器的配置限制或取消某些头命令
可写入的目录
说明 检测方法 可能存在的现 象
是否存在 设计方解释 解决方案 规避方法
WEB 服务器提供了供“WEB 用户”可写入的目录,一般用于文件上载 漏洞扫描、配置检查 配合 PUT 与 DELETE 头命令,可能操作此类目录中的文件。 攻击者可能上传非法的文件,此文件可以通过网站的域名访问到,影响网站的声 誉。
SQL 语句
SQL 变量声明 SQL 函数删除空格 SQL 语句变量赋值 SQL 语句变量声明 SQL 扩展存储过程
12、 在关键数据表上设定 trigger,当数据库执行相关 update 操作时进行数据可靠性的 再次验证,如发现 update 内容中含有不符合相关字段内容的信息,或如下恶意代码可
密码使用不可逆的 md5 采样存储 所有用户的密码都采用 MD5 加密后存入数据库
其他安全机制
1、 建立安全的代码编写规范,严格代码安全处理机制,对整个网站系统动态代码进行安全 审查,查找并清除不安全的代码设计;
2、 建立安全的数据库访问接口,严格进行代码对数据库的访问权限分离;严格禁止应用程
序代码使用超级用户权限的帐号(如 SA)直接连接数据库; 3、 重要站点进行 Session 校验,防止未经过授权的人员非法登陆页面。
分配专用的用户身份,除必要的权限外,不分配其它权限。使用操作系统与 DB 级别的权限控制。 降低应用可能带来的问题,提高应用模块中对操作与权限的判断,减少应用中的 漏洞。
身份判定是否存在绕过的问题。
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
身价判定不具有全局性、只在入口判定而敏感操作仍可达。 系统的安全建立在攻击者不知道敏感操作入口的基础上。 或者在敏感操作时做了判定但容易被攻击者骗过。 代码查看、人工渗透 在登录页做了判定,而敏感操作页未进行判定。攻击者只要知道敏感操作页的入 口与参数。即使不知道用户名密码也能实施操作。
检查程序目录,删除 LOG 等文件 Web 模块不需要注释,java 类里的注释只包括函数功能说明
HTTP 头部命令
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
WEB 服务器提供了过多与应用无关的头命令,如: POST,GET,HEAD,TRACE,PUT,DELETE 等 漏洞扫描 某些头命令的使用与应用系统无关,可以直接进行一些访问。 比如 PUT 命令可能直接上载文件。
变量定义字符 系统默认变量 执行语句 SQL 语句删除数据表 SQL 语句插入数据 SQL 语句建立数据表 SQL 语句选择数据 SQL 语句删除数据 SQL 语句更新数据
varchar master.
truncate declare rtrim sEt dEcLaRe xp_
SQL 语句定义字符串 SQL Server 主数据库
1. 限制输入的长度 2. 对于将要入库、显示在界面、显示在 html tag 中的内容进行关键字替代 在 action 页面 request 参数时过滤掉跨站脚本的关键字(包括转义符)
存在源文件的文本(可直接下载的)
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案
规避方法
由于开发者的不良习惯,一些备份文件可能存在应用目录中。 如 bak, txt, java, rar, zip 等。 如果名称与功能代码名称相同、或名称过于通俗(如 backup.rar),可能被穷举出来。 漏洞扫描、文件浏览
结合 DELETE 与 PUT 功能限制,确保只能通过应用上传文件。
各部分程序的用户、权限,是否存在权限过高。
Baidu Nhomakorabea说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案
规避方法
理论上说,web、DB 均分配专用的用户身份,除必要的权限外,不分配其它权限。 使用操作系统与 DB 级别的权限控制。 代码查看、人工渗透
1. 对特殊文字、编码、以及 SQL 语句关键字进行过滤。对字段数组每个元素进 行过滤
2. 检查各项输入的有效性(比如日期、数字等) 3. 限制各项输入的长度 利用 preparedstatment,在 SQL 语句中使用“?”占位符,一个占位符匹配一个 参数,所有将要替换占位符的字符串都将作为一个参数送到 DBMS 中作为一条 SQL 语句执行,不会发生嵌套 SQL 的情况
1. 仔细检查 web 网站目录,所有可直接下载的文件、包均要检查是否包含源代 码
开发用的 IDE 不会保留备份文件,通过搜索指定扩展名的文件找到备份文件并删 除
是否存在无用的文件
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
由于开发者的不良习惯,一些无用可能存在应用目录中。 特别要注意 LOG 文件。 如果名称过于通用,可能被穷举出来。 漏洞扫描、文件浏览
SQL 注入
说明 检测方法 可能存在的现 象
是否存在 设计方解释 解决方案
规避方法
应用模块使用用户输入组成查询,用户输入中可能包含干扰 SQL 执行的内容 漏洞扫描、代码检查 部分请求字段处理时,不对 SQL 中的文本符号(‘)或其变形进行检查。攻击者可能 有以下举动: 1. 在界面中输入单引号,随后是干扰 SQL 的文字 2. 单引号变形为编码(%27)、URL 编码、Unicode 编码,特定数据库编码 3. 攻击者通过表单源代码分析,使用 hidden 值、按钮值攻击 4. 攻击者通过 action 功能分析,使用表单中不存在的字段攻击 5. 攻击的内容可能是字段数组
数据库文件进行备份;并查看数据库表文件,查找并记录被修改的数据表和字段。
11、
在 Web 网站服务器上安装 IIS 关键字过滤程序,过滤关键字列表如下:
‐‐
SQL 注释语句,常用于结束攻击字符串
+
SQL 字符串连接语句
%2b
空格字符 ASCII
@ @@ exec drop insert create select delete update
8、 对数据库存储过程进行安全处理,删除 xp_cmdshell 等风险重大的扩展存储过程及相关 文件(可恢复),并修改数据库相关帐号密码。
9、 删除网站目录内的所有备份文件(*.bak)。 10、 对网站系统的 HTML 页面文件和脚本源文件进行 MD5 校验,当再次发生攻击时可
以快速判断是否有文件被修改;当发生攻击时,立刻对网站文件、网站和数据库日志、
<
HTML 标记符号
<script
HTML 脚本标记符号
<title>
HTML 标题标记
<!‐‐
HTML 注释符号
.js
HTML 脚本文件扩展名
能使用的关键字的时候,即忽略此操作;
相关关键字如:(以下关键字可选择性过滤)
仔细检查 web 网站目录。虚拟目录与直接目录下均不应存在系统默认文件。 仔细检查所有的程序目录,删除无用文件。除网站程序外,不保留其他发布项目
是否透露敏感信息
说明 检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
动态与静态文件中可能包括与开发者有关的邮箱、电话等。 漏洞扫描 敏感内容可能存在于 LOG 文件、readme.txt 文件、甚至 web 模块源代码的注释中 (HTML 注释)
敏感数据保存
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
对于用户名、密码等数据,一般也要保存于数据库中,一旦数据库被攻破,此类 数据将全部暴露。 设计模式检查、数据库浏览 用户的登录密码在数据库中以明文存储,或者以简单加密算法存储(根据明密文 比较可知算法)
1. 仔细检查 web 网站目录,所有可直接下载的文件。 仔细检查所有的程序目录,删除无用文件
是否存在系统默认的文件
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
由于系统安装配置时的问题,一些例子、教程被攻击者访问到。 由于一些例子功能过于强大(修改数据、浏览服务器资源等),可能被利用。 漏洞扫描、文件浏览 这些内容可能在安装插件时产生。
跨站脚本
说明 检测方法 可能存在的现 象
是否存在 设计方解释 解决方案
规避方法
应用模块将用户输入展示在网页中,用户输入可能包含干扰浏览器的内容 漏洞扫描、代码检查 部分请求字段处理时,不对 HTML 的标志符(<,>)或其变形进行检查。攻击者可能 有如下举动: 1. 针对页面直接的文字,使用完整的<,> 2. 针对在 HTML tag 中显示的文字,使用不完整<,> 3. 不带<,>有可能执行跨站脚本
4、 对用户实行角色和权限的分层管理,采用分类授权,权限校验等技术保证网络的安全和
实际使用中的安全。
用户登陆均会进行身份验证,防止非法人员登陆后台管理系统。
5、 必要时系统采用 SSL 协议,对传输的数据进行加密保护。
6、 系统将用户在页面上录入的密码传输至专用加密类,由特殊的加密类进行加密保护。
7、 通过防火墙屏蔽内往所有数据库服务器的 Internet 连接,防止建立反向连接后门、跳板 通道、以及下载有害文件;
通过 WEB 服务器的配置限制或取消某些头命令
可写入的目录
说明 检测方法 可能存在的现 象
是否存在 设计方解释 解决方案 规避方法
WEB 服务器提供了供“WEB 用户”可写入的目录,一般用于文件上载 漏洞扫描、配置检查 配合 PUT 与 DELETE 头命令,可能操作此类目录中的文件。 攻击者可能上传非法的文件,此文件可以通过网站的域名访问到,影响网站的声 誉。
SQL 语句
SQL 变量声明 SQL 函数删除空格 SQL 语句变量赋值 SQL 语句变量声明 SQL 扩展存储过程
12、 在关键数据表上设定 trigger,当数据库执行相关 update 操作时进行数据可靠性的 再次验证,如发现 update 内容中含有不符合相关字段内容的信息,或如下恶意代码可
密码使用不可逆的 md5 采样存储 所有用户的密码都采用 MD5 加密后存入数据库
其他安全机制
1、 建立安全的代码编写规范,严格代码安全处理机制,对整个网站系统动态代码进行安全 审查,查找并清除不安全的代码设计;
2、 建立安全的数据库访问接口,严格进行代码对数据库的访问权限分离;严格禁止应用程
序代码使用超级用户权限的帐号(如 SA)直接连接数据库; 3、 重要站点进行 Session 校验,防止未经过授权的人员非法登陆页面。
分配专用的用户身份,除必要的权限外,不分配其它权限。使用操作系统与 DB 级别的权限控制。 降低应用可能带来的问题,提高应用模块中对操作与权限的判断,减少应用中的 漏洞。
身份判定是否存在绕过的问题。
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
身价判定不具有全局性、只在入口判定而敏感操作仍可达。 系统的安全建立在攻击者不知道敏感操作入口的基础上。 或者在敏感操作时做了判定但容易被攻击者骗过。 代码查看、人工渗透 在登录页做了判定,而敏感操作页未进行判定。攻击者只要知道敏感操作页的入 口与参数。即使不知道用户名密码也能实施操作。
检查程序目录,删除 LOG 等文件 Web 模块不需要注释,java 类里的注释只包括函数功能说明
HTTP 头部命令
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
WEB 服务器提供了过多与应用无关的头命令,如: POST,GET,HEAD,TRACE,PUT,DELETE 等 漏洞扫描 某些头命令的使用与应用系统无关,可以直接进行一些访问。 比如 PUT 命令可能直接上载文件。
变量定义字符 系统默认变量 执行语句 SQL 语句删除数据表 SQL 语句插入数据 SQL 语句建立数据表 SQL 语句选择数据 SQL 语句删除数据 SQL 语句更新数据
varchar master.
truncate declare rtrim sEt dEcLaRe xp_
SQL 语句定义字符串 SQL Server 主数据库
1. 限制输入的长度 2. 对于将要入库、显示在界面、显示在 html tag 中的内容进行关键字替代 在 action 页面 request 参数时过滤掉跨站脚本的关键字(包括转义符)
存在源文件的文本(可直接下载的)
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案
规避方法
由于开发者的不良习惯,一些备份文件可能存在应用目录中。 如 bak, txt, java, rar, zip 等。 如果名称与功能代码名称相同、或名称过于通俗(如 backup.rar),可能被穷举出来。 漏洞扫描、文件浏览
结合 DELETE 与 PUT 功能限制,确保只能通过应用上传文件。
各部分程序的用户、权限,是否存在权限过高。
Baidu Nhomakorabea说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案
规避方法
理论上说,web、DB 均分配专用的用户身份,除必要的权限外,不分配其它权限。 使用操作系统与 DB 级别的权限控制。 代码查看、人工渗透
1. 对特殊文字、编码、以及 SQL 语句关键字进行过滤。对字段数组每个元素进 行过滤
2. 检查各项输入的有效性(比如日期、数字等) 3. 限制各项输入的长度 利用 preparedstatment,在 SQL 语句中使用“?”占位符,一个占位符匹配一个 参数,所有将要替换占位符的字符串都将作为一个参数送到 DBMS 中作为一条 SQL 语句执行,不会发生嵌套 SQL 的情况
1. 仔细检查 web 网站目录,所有可直接下载的文件、包均要检查是否包含源代 码
开发用的 IDE 不会保留备份文件,通过搜索指定扩展名的文件找到备份文件并删 除
是否存在无用的文件
说明
检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
由于开发者的不良习惯,一些无用可能存在应用目录中。 特别要注意 LOG 文件。 如果名称过于通用,可能被穷举出来。 漏洞扫描、文件浏览
SQL 注入
说明 检测方法 可能存在的现 象
是否存在 设计方解释 解决方案
规避方法
应用模块使用用户输入组成查询,用户输入中可能包含干扰 SQL 执行的内容 漏洞扫描、代码检查 部分请求字段处理时,不对 SQL 中的文本符号(‘)或其变形进行检查。攻击者可能 有以下举动: 1. 在界面中输入单引号,随后是干扰 SQL 的文字 2. 单引号变形为编码(%27)、URL 编码、Unicode 编码,特定数据库编码 3. 攻击者通过表单源代码分析,使用 hidden 值、按钮值攻击 4. 攻击者通过 action 功能分析,使用表单中不存在的字段攻击 5. 攻击的内容可能是字段数组
数据库文件进行备份;并查看数据库表文件,查找并记录被修改的数据表和字段。
11、
在 Web 网站服务器上安装 IIS 关键字过滤程序,过滤关键字列表如下:
‐‐
SQL 注释语句,常用于结束攻击字符串
+
SQL 字符串连接语句
%2b
空格字符 ASCII
@ @@ exec drop insert create select delete update
8、 对数据库存储过程进行安全处理,删除 xp_cmdshell 等风险重大的扩展存储过程及相关 文件(可恢复),并修改数据库相关帐号密码。
9、 删除网站目录内的所有备份文件(*.bak)。 10、 对网站系统的 HTML 页面文件和脚本源文件进行 MD5 校验,当再次发生攻击时可
以快速判断是否有文件被修改;当发生攻击时,立刻对网站文件、网站和数据库日志、
<
HTML 标记符号
<script
HTML 脚本标记符号
<title>
HTML 标题标记
<!‐‐
HTML 注释符号
.js
HTML 脚本文件扩展名
能使用的关键字的时候,即忽略此操作;
相关关键字如:(以下关键字可选择性过滤)
仔细检查 web 网站目录。虚拟目录与直接目录下均不应存在系统默认文件。 仔细检查所有的程序目录,删除无用文件。除网站程序外,不保留其他发布项目
是否透露敏感信息
说明 检测方法 可能存在的现 象 是否存在 设计方解释 解决方案 规避方法
动态与静态文件中可能包括与开发者有关的邮箱、电话等。 漏洞扫描 敏感内容可能存在于 LOG 文件、readme.txt 文件、甚至 web 模块源代码的注释中 (HTML 注释)