目录

一、安全测试常见的测试方法

1.功能测试

2.漏洞扫描

3.模拟攻击实验

4.静态代码检查

5.动态渗透测试

6.数据扫描

二、SQL注入

1.验证用户输入

2.参数化查询

3.转义用户输入

4.限制数据库权限

5.安全更新

三、用户认证安全

1.不同用户权限

2.用户冲突

3.用户权限改变

4.登陆密码安全性

5.绝对路径登录

6.退出系统

四、数据库安全

1.数据泄密

2.入侵和恶意攻击

3.数据备份与恢复

五、系统网络安全

1.漏洞扫描工具

2.网络及应用系统扫描

六、登录安全的其他问题

1.连续失败后的处理策略

2.用户登录密码

3.验证码

4.页面超时

5.cookie存储

6.https协议

七、越权问题

1.未授权访问

2.修改参数

八、页面权限泄漏

九、HTML注入

十、文件下载

1.权限限制

2.删除参数

十一、上传文件

1.文件格式

2.文件大小

3.文件名

4.文件内容

5.用户权限

6.上传空间

7.上传成功的判断

8.日志记录

写在结尾


一、安全测试常见的测试方法

1.功能测试

采用软件测试中的黑盒测试方法,对涉及安全的软件功能,如用户管理模块、权限管理模块、加密系统、认证系统等进行测试,主要是验证各个模块功能是否有效。

2.漏洞扫描

借助于特定的漏洞扫描工具,能够发现所维护信息系统存在的安全漏洞,为信息系统网络安全防护做到有的放矢,及时修补漏洞。

3.模拟攻击实验

以模拟攻击来验证软件或者信息系统的安全防护能力。

4.静态代码检查

通过代码走读的方式对源代码的安全性进行测试,常用的代码检查方法有:数据流、控制流、信息流等,通过这些测试方法与安全规则库进行匹配,进而发现潜在的安全漏洞。静态代码检查主要在编码阶段进行测试,尽可能早地发现安全性问题。

5.动态渗透测试

借助工具或者手工模拟黑客的输入,对应用程序进行安全测试,进而发现系统中的安全性问题。动态渗透测试一般在系统测试阶段进行。

6.数据扫描

主要是对内存进行测试,尽量发现诸如缓冲区溢出之类的漏洞。

二、SQL注入

SQL注入是一种常见的网络攻击技术,通过利用应用程序在构建SQL查询时的漏洞进行攻击。这些漏洞通常是由于应用程序没有正确验证用户输入或者没有适当地转义用户输入导致的。举个例子:一个登录页面输入用户名和密码,用户名输入框直接输入'or'1=1时,查询SQL就变成了select *from sys_user where username=''or'1=1';这将返回所有的用户记录,从而跳过了用户名的验证,实现了入侵。

为了防止SQL注入攻击,应该采取以下措施:

1.验证用户输入

对于任何用户输入,应该使用合适的验证技术来确保输入的有效性和安全性。例如,可以使用正则表达式或者启发方式来检测可能的恶意输入。

2.参数化查询

使用参数化查询或预编译语句来构建SQL查询。这样可以确保用户输入被视为数据而不是SQL代码的一部分,从而防止攻击者注入恶意的SQL代码。

3.转义用户输入

对于任何用户输入,应该使用适当的转义技术来转义特殊字符。例如,可以使用MySQL的‘mysqli_real_escape_string’函数来转义字符串中的特殊字符。

4.限制数据库权限

应该将应用程序连接到的数据库的权限限制到最低限速。例如,可以为应用程序创建一个只拥有读取数据的用户账号,从而限制攻击者可以执行的操作。

5.安全更新

定期更新应用程序和数据库软件的安全补丁,以确保系统免受已知漏洞的攻击。

三、用户认证安全

1.不同用户权限

确保系统能够明确区分不同用户的权限。

2.用户冲突

检查系统中是否存在用户冲突的问题。

3.用户权限改变

检查系统是否因为用户权限的改变而造成混乱。

4.登陆密码安全性

检查用户的登录密码是否可见(接口传参时要加密传输)、可复制。

5.绝对路径登录

检查系统是否存在通过绝对路径登录的问题,如:直接拷贝已登录系统的连接,应默认跳转到登录页面,限制直接查看。

6.退出系统

检查用户退出登录系统后,是否删除了所有鉴权标记,并无法通过后退键再次直接进入系统。

四、数据库安全

1.数据泄密

数据库中的敏感数据需要加密显示(尤其是银行系统、保密系统等,一般有账号密码、银行卡号等等)。

2.入侵和恶意攻击

黑客和恶意内部人员可能试图访问或者篡改数据库中的数据。因此,需要实施强大的访问控制策略,并使用防火墙、入侵检测和响应以及加密等技术来保护数据库

3.数据备份与恢复

必须制定数据库备份和恢复计划,以防止数据丢失和灾难性事件,主要包括:定期备份数据、测试备份的完整性和可用性,以及在需要时快速恢复数据等。

五、系统网络安全

1.漏洞扫描工具

基于漏洞数据库,使用漏洞扫描工具对指定的远程或者本地计算机系统的安全脆弱性进行检测。通过漏洞扫描技术,测评人员能够检测主机是否开放了不必要的服务,是否对外部的网络探测行为进行了有效的屏蔽,是否设置了安全策略避免自身的敏感信息外协,是否安装了存在严重安全隐患的操作系统版本等等。常见的主流漏洞扫描工具和商业化产品有:Nessus、Acunetix WVS 、APPscan、极光、榕基等。

2.网络及应用系统扫描

有助于帮助用户了解网络的安全设置和与运行的应用服务,及时发现安全漏洞,客观评估风险等级,同时还能根据扫描的结果修正安全漏洞和系统中的不合理设置。

六、登录安全的其他问题

登录安全测试除了SQL注入外,需要覆盖各其他各个方面,来确保系统的安全性满足要求。

1.连续失败后的处理策略

如:连续登陆失败3次,是否会锁定账号一段时间,或者进行其他有效的防护措施,以防暴力破解。

2.用户登录密码

密码是否可见,以及是否有密码过期策略。密码是否按照符合要求的加密算法进行加密,并且不能以明文方式传输。日志中和数据库中,密码都应限制以明文密码存储。

3.验证码

验证码的失效时间验证。

4.页面超时

验证页面的超时机制,防止长时间无操作导致的会话劫持等一系列风险。

5.cookie存储

检查cookie中是否保存用户名和密码,若保存,则需要加密存储,以保护用户的数据安全。

6.https协议

对于安全性要求高的系统,最好使用https协议进行加密传输。

七、越权问题

越权问题是一种常见的网络安全挑战,可以发生在任何有权限管理的系统中。在测试越权问题时,从以下两个方向来验证:

1.未授权访问

不登陆用户账号,直接访问要测试的功能模块(正常的场景是需要登录成功后才能访问),如果能正常访问,则说明存在漏洞。

2.修改参数

例如:A账号的个人资料ID为1,B账号的个人资料ID为2,登录B账号,直接把URL的ID修改为1,如果可以查看到A的个人资料,说明存在越权漏洞。类似于其他参数也可以按照类似方法,查看URL的get参数对那些类似明显的顺序数字,直接修改,查看是否能越权访问。

八、页面权限泄漏

同第七项中的未授权访问,把后台目录的URL全部测试一遍,不登陆直接访问的情况即可。

九、HTML注入

HTML注入,也被称为虚拟污染,当网站接收到的HTML没有进行合适的处理时,攻击者可以通过注入恶意的HTML代码改变网页的内容。

例如:

1.输入<html”>”gfhd</html>,看是否出错;

2.输入<input type=”text” name=”user” οnclick="alert(1)"/>,看是否出现文本框;

3.输入<script type=”text/javascript”>alert(“提示”)</script>看是否出现提示。

4.输入”><script type=”text/javascript”>alert(“提示”)</script>看是否出现提示。

5.输入 ”><script><” 看是否出现代码溢出。

十、文件下载

1.权限限制

如果有下载权限,确认权限限制是否正确。例如,用户未登录时,是否禁止用户下载。

2.删除参数

查看文件是否支持删除,如果可删除,查看删除的URL里面的参数是否可以修改。如果直接修改删除参数,是否能越权删除其他文件。

十一、上传文件

1.文件格式

上传的文件格式是否符合规定要求的格式,如是否可以上传.exe文件和.zip文件等。

限制这类文件格式是因为这类可执行文件格式存在安全风险。如常见的病毒和木马程序经常以.exe文件的形式存在,对于一些恶意软件的可执行文件,如果不进行限制,就可能在用户不知情的情况下被上传和执行,进而造成系统被攻击、数据泄漏等严重后果。此外,从技术角度来说,.exe文件是基于Windows或其他操作系统的一种可执行文件格式,其包含的内容可能对系统产生影响。因此,有必要限制这些格式的上传,用以保护用户和系统的安全。

2.文件大小

文件大小是否满足系统设置的大小显示,需测试最小值与最大值。如,上传0KB的文件是否会导致异常错误,上传超限过大文件是否有错误提示且页面无异常。

3.文件名

文件名是否符合系统设定的命名规则,如是否包含特殊字符。

4.文件内容

上传的文件中存在恶意代码、病毒等,上传时是否会检测到。

5.用户权限

操作上传文件,需要校验用户是否有上传文件的权限。测试已上传的文件是否能够被系统正确地访问和控制,如是否只有授权用户才能访问和下载。

6.上传空间

上传空间是否有限制,上传的文件大于服务器剩余上传空间限制时,是否会将大文件拆分上传,是否会出现异常错误。

7.上传成功的判断

上传过程中,网络异常或者中断服务等导致文件上传异常中断,程序是否能判断文件上传是否成功。

8.日志记录

测试上传文件的日志记录是否完整,日志信息是否记录全,涉及的敏感信息是否有加密或隐藏显示。

写在结尾

总之,安全测试对于确保软件应用程序的安全性和可靠性具有重要意义。对于企业而言,进行安全测试可以降低安全风险,提高软件质量,增强用户信任,遵守法规要求,并防止数据泄漏和攻击。因此,在软件开发生命周期中,应该将安全测试作为一项重要的任务来对待,以确保最终发布的安全性。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐