安全
软件安全(Software Security):将开发的软件存在的风险控制在可接受的水平,以保证软件的正常运行。
安全编码(Secure Coding):是用于防止安全漏洞的规则和指南,可以防止、检测和消除可能危及软件安全的错误。
Web应用系统体系架构:

网站安全常见问题
网络层面 拒绝服务、IP欺骗、ARP欺骗、嗅探
系统层面 软件框架漏洞攻击(Struts2、OpenSSL)、配置错误
应用层面 代码缺陷(SQL注入、XSS、CSRF ......) 信息泄露 拒绝服务、CC攻击 钓鱼、业务流程缺陷

常见编程错误
整数溢出:当算术运算试图创建一个超出可用位数表示范围(大于最大值或小于最小值)的数值时,就会发生整数溢出错误。

Web应用程序中,经常会出现一些乱码问题,下面列出常见的几种乱码 情况:
字符串在解码时的字符集与编码字符集不一致时,汉字会变为乱码。
中文在经过不支持中文的ISO-8859-1编码后,其字符会变成"?"
SQL注入
SQL注入:通过把SQL命令插入到Web表单或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令的目的。
填入用户名jsmith' or 1=1--,密码a
填入用户名jsmith'; UPDATE user set phone='111-111-1111' --,密码a
填入用户名jsmith' ; drop table discounts--,密码a
如何编码中避免SQL注入:1、内置过滤系统(建立黑名单)2、严格限定参数类型3、明确参数检验的边界,必须在服务端执行数据验证4、采用参数化查询的方法5、存储过程6、严格检查用户输入,注意特殊字符7、转义用户输入内容
失效的验证和会话管理
用户凭证和Session ID是Web应用中最敏感的部分,也是攻击者最想获取的信息。
一位用户在公用电脑上没有登出他访问的网站,导致下一位使用者可以看到他的网站会 话内容。
登录页面没有进行加密,攻击者通过截取网络包,轻易发现用户登录信息。
主要防范措施: 用户密码强度(普通:6字符以上;重要:8字符以上;使用多种验证方式) 不使用简单或可预期的密码恢复问题; 登录出错时不给过多提示; 密码传输时采用加密形式传输; 登录页面需要SSL加密; 对多次登录失败的帐号进行短时锁定; 设置会话闲置超时; 保护Cookie; 不在URL中显示Session ID
跨站脚本XSS
Cross-Site Scripting(XSS)。攻击者通过向Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
危害包括:盗取cookie信息;篡改用户浏览的正常内容,伪造页面信息;把你重定向到一个恶意站点,网站挂马;利用浏览器的漏洞控制你的机器

措施:严格检查用户输入。尽量限制在HTML代码中插入不可信的内容(可被用户输入或修改的内容)。对于需要插入的不可信内容必须先进行转义(尤其对特殊字符、语法符合必须转义或重新编码)。
不安全的直接对象引用
服务器上具体文件名、路径或数据库关键字等内部资源被暴露在URL或网页中,攻击者可以此来尝试直接访问其他资源。
示例:某网站的新闻检索功能可搜索指定日期的新闻,但其返回的URL中包含了指定日 期新闻页面的文件名
攻击者可以尝试不同的目录层次来获得系统文件win.ini
主要防范措施:避免在URL或网页中直接引用内部文件名或数据库关键字可使用自定义的映射名称来取代直接对象名,如http://example.com/online/getnews.asp?item=11。锁定网站服务器上的所有目录和文件夹,设置访问权限验证用户输入和URL请求,拒绝包含./或../的请求
安全配置错误
管理员在服务器安全配置上的疏忽,或者采用默认配置,通常会导致攻击者非法获取信息、篡改内容,甚至控制整个系统。
例如服务器没有及时安装补丁,网站没有禁止目录浏览功能,网站允许匿名用户直接上传文件,服务器上文件夹没有设置足够权限要求,允许匿名用户写入文件,Web网站安装并运行并不需要的服务,比如FTP或SMTP,出错页面向用户提供太过具体的错误信息,比如call stack,Web应用直接以SQL SA帐号进行连接,并且SA帐号使用默认密码,SQL服务器没有限制系统存储过程的使用,比如xp_cmdshell
敏感信息泄漏
对重要信息不进行加密处理或加密强度不够,或者没有安全的存储加密信息,或者在传输的时候没有采用加密措施,都会导致攻击者获得这些信息。
例如:对于重要信息,如密码等,直接以明文写入 数据库使用自己编写的加密算法进行简单加 密,简单地使用MD5, SHA-1等散列算法将加密 信息和密钥存放在一起
主要防范措施:对所有重要信息进行加密,使用MD5, SHA-1等Hash算法时候采用加盐存储的方式,产生的密钥不能与加密信息一起存放,严格控制对加密存储的访问
功能级访问控制缺失
某些Web应用包含一些“隐藏”的URL,这些URL不显示在网页链接中,但管理员可以直接输入URL访问到这些“隐藏”页面。如果我们不对这些URL做访问限制,攻击者仍然有机会打开它们。
某商品网站举行内部促销活动,特定内部员工可以通过访问一个未公开的URL链接登录公司网站,购买特价商品。此URL通过某员工泄露后,导致大量外部用户登录购买。
主要防范措施:对于网站内的所有内容(不论公开的还是未公开的),都要进行访问控制检查。只允许用户访问特定的文件类型,比如.html, .asp, .php等,禁止对其他文件类型的访问。考虑一下管理权利的过程并确保能够容易的进行升级和审计
Web UI设计时,功能级别的验证是通过用户的访问权限而定,应用程序需要在每个功能 被用户访问时,都要在服务端验证该用户是否拥有其访问控制权限。如果忽视了验证步骤, 攻击者就可能伪造请求,在未经授权的情况下访问这些功能。
纠错建议:如果用户没有某个功能访问权限,应将按钮设计为不可见,而不是disabled。
跨站请求伪造CSRF
攻击者构造恶意URL请求,然后诱骗合法用户访问此URL链接,以达到在Web应用中以此用户权限 执行特定操作的目的。 和XSS的主要区别是:XSS的目的是在客户端执行脚本; CSRF的目的是在Web应用中执行操作。
Internet Explorer 3.0 到 6.0 版本支持以下 HTTP 或 HTTPS URL 语法:
黑客制作一个国内各种路由的默认IP和默认密码构造一个Http Authentication Url暴力登陆脚本。
主要防范措施: 避免在URL中明文显示特定操作的参数内容使用同步令牌 (Synchronizer Token),检查客户端请求是否包含令牌及其有效性。检查Referer Header,拒绝来自非本网站的直接URL请求
未验证的重定向和跳转
攻击者可能利用未经验证的重定向目标来实现钓鱼欺骗,诱骗用户访问恶意站点。攻击者可能利用未经验证的跳转目标来绕过网站的访问控制检查。
利用重定向的钓鱼链接:
利用跳转绕过网站的访问控制检查:
主要防范措施:尽量不用重定向和跳转对重定向或跳转的参数内容进行检查,拒绝站外地址或特定站内页面。不在URL中显示目标地址,以映射的代码表示http://example.com/redirect.asp?=234
表单重复提交问题
几个方面:一是提交表单后在当前页面点击浏览器上的"后退"按钮,此时会回到之前的页面,然后再次提交表单造成重复提交;二是用户提交表单后,在当前页面点击浏览器上的"刷新"按钮或者直接按F5功能键完成重复提交;三是通过恶意程序来重复发送恶意请求。
纠错建议是使用令牌(token)机制。在添加页面中加入token的隐藏域,用于后面步骤判断,提交表单后,对token值进行判断,判断过后,需要对token值重新生成并保存。令牌相等时,才进行业务的逻辑处理
输入数据有效性校验
最后更新于
