前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云安全最佳实践】10 种常见的 Web 安全问题

【云安全最佳实践】10 种常见的 Web 安全问题

原创
作者头像
KSUN
发布2022-11-10 14:14:43
1.9K1
发布2022-11-10 14:14:43
举报
文章被收录于专栏:KSUN分享KSUN分享

对于很多公司来说,直到发生安全漏洞后,网络安全最佳实践才成为优先事项.

Web开发安全问题,其实对很多程序员来说都是很模糊的.

应对 Web 安全威胁的有效方法必须是主动的.

下面说一下10种常见且重要的Web安全陷阱的认识和解决方法.

身份验证(Authentication)和身份授权(Authorization)

程序员经常对身份授权和身份验证之间的区别表示困惑.对这两个术语使用会增加它们的"朦胧感".

区别:

  • 认证:验证用户是否是或者或至少看起来是"人".
  • 授权:授予用户对特定资源的访问权限或执行特定操作的权限。

换句话说,身份验证是知道实体是谁,而授权是给定实体可以做什么.考虑到这一点,就探讨 10 种常见的互联网漏洞问题.


注入缺陷(Injection Flaws)

注入缺陷是经典的由于过滤不受信任的输入的失败造成的.当我们将未过滤的数据传递到SQL服务器(SQL 注入)/浏览器(通过跨站脚本)/LDAP 服务器(LDAP 注入)或其他任何地方时,可能会发生注入缺陷.这里的问题是攻击者可以注入命令来劫持客户端的浏览器,从而导致数据丢失损坏或勒索.

应用程序应当从不受信任的来源接收的任何内容且必须进行过滤,最好是根据白名单进行过滤.不建议为此使用黑名单,因为很难正确配置.黑名单也被认为很容易被黑客绕过.

预防

防止注入只是"简单"的过滤用户的输入,并考虑哪些用户是可以信任的.过滤是一项相当艰巨的任务,因为我们需要处理所有输入,除非它毫无疑问是可信的.

如果我们在一个有1000个输入的系统中过滤999个输入,仍然有一个字段可以成为导致我们系统崩溃的致命弱点.

由于过滤很难正确,因此建议使用腾讯云T-Sec Web应用防火墙.是非常有效的.

身份验证中断(Broken Authentication)

在身份验证中断期间可能出现的问题不一定来自同一种原因.有无数可能的陷阱,如:

  • URL可能包含会话ID,并在referer头中泄漏
  • 密码可能在存储或传输过程中未加密
  • 会话ID可能是可扫描出来的,这使得获得未经授权的访问变的太容易了
  • 使用HTTP(没有使用SSL)等,则可能发生会话劫持

预防

使用成熟的框架编写代码.如果您编写自己的代码,请要非常谨慎的编写任何一行代码.并就可能出现的潜在问题进行反省.

跨站点脚本攻击 (XSS)

攻击者将输入js标记的代码发送到网站.当此输入在未经处理的情况下返回给用户时,用户的浏览器将执行它.这是一个相当普遍的过滤失败,(本质上是注射缺陷).例如:在页面加载时,脚本将运行并用于某些权限的cookie发送给攻击者.

预防

将一些HTML标签转为实体.如:<script>转为&lt;script&gt;

不安全的直接对象引用

这是一个典型的案例,即信任用户的输入,并通过继承这个想法产生的安全漏洞.并付出代价.

直接引用对象意味着内部对象(例如,文件或数据库密钥)暴露给用户,更容易受到攻击.

攻击者可以提供此引用,如果身份授权未被强制执行或被破坏,攻击者就会进入后台.

例如:该代码有一个模块,可以读取并允许用户下载文件,使用参数指定文件名.如果开发人员忽略了代码中的授权,攻击者现在可以使用它下载系统文件(例如,网站代码或服务器数据:如备份)等.

不安全的直接对象引用漏洞的另一个例子是密码重置函数,该函数依赖用户输入来确定其身份.单击有效的URL后,攻击者可以修改URL中的字段,使其显示类似"admin"用户名的内容

预防

使用内部代码执行,不要使用外部参数来执行

安全配置错误

遇到配置错误的服务器和网站是很常见的,例如:

  • 在生产环境中运行启用了调试程序
  • 在服务器上启用目录列表(可能泄露某些私密信息)
  • 运行非常古老的程序
  • 运行不必要的服务
  • 不更改默认密钥和密码(别以为没有"傻子",这种情况太多了)
  • 向潜在攻击者泄露错误处理信息(堆栈跟踪)

预防

周期内修改密码,修复默认端口(22,3306,3389,21如果是外部可以访问的情况下),更新最新版本的程序.或积极维护现有可能潜在的bug漏洞,千万别再生产环境使用调试模式或开启debug等.

敏感数据泄露

此安全漏洞与加密和资源保护有关.敏感数据应该始终进行加密,包括传输中的数据和静态数据.没有例外!用户密码等不应传输或未加密存储,并且密码应始终应该进行哈希处理.

会话ID和敏感数据不应在URL中传输,这一点怎么强调都不为过.包含敏感数据的Cookie应打开"secure".

预防

使用HTTPS传输,Cookie打开secure,不需要或非必要的的数据及时删除,没人可以说数据不可能被盗取.所有密码都使用哈希加密.

缺少功能级的访问控制

如果在服务器上调用函数时未执行适当的授权,则会发生这种情况.开发人员倾向于假设,由于服务器端生成页面,客户端将无法访问服务器未提供的功能.但是事情并没有那么简单,因为攻击者总是可以伪造对"隐藏"功能的请求.假设有一个面板,并且该按钮仅在用户实际上是管理员时才会显示.如果缺少授权,没有什么能阻止攻击者发现和滥用此功能.

预防:在服务器端,必须始终验证或执行授予的权限.

跨站点请求伪造 (CSRF)

在CSRF中,恶意的第三方,欺骗浏览器滥用其权限来进行操作.

例如:攻击者A想通过将B的部分钱转入A的账户.

B操作之后传输完成正常应该显示:https://example.com/xxx?amount=100&Account=123456

A知道B经常访问A控制的网站,因此A在B的网站上放置了以下代码片段:

https://A.blog.com<img src=https://example.com/xxx?amount=100&Account=67890 width=0 height=0 />

当B下次访问网站时,浏览器错误地认为片段链接到图像.浏览器会自动发出获取图片的请求.但是,该请求没有在浏览器中显示图像,而是B的A转账100元.

预防

将机密令牌存储在第三方站点无法访问的隐藏表单字段中

使用具有已知漏洞的程序或插件

标题说明了一切

预防

不要一味的复制粘贴代码或使用某些代码.先认真看好代码,判断是否安全.

经常更新并使用最新的版本

未经验证的重定向和转发

这是另一个输入过滤问题.假设目标站点具有将URL作为参数.操作参数可以创建一个将浏览器重定向到的URL.用户会看到链接,它看起来无害,足以信任和点击.但是单击此链接可能会将用户转移到恶意软件的页面。或者转向到攻击者自己的钓鱼网站内.

预防

  • 不要做重定向
  • 当需要重定向时,需要有一个有效重定向位置的静态列表或数据库.
  • 将自定义参数列入白名单(不过跟麻烦)


当然条件允许的话可以使用腾讯云旗下的安全产品:T-Sec 云防火墙T-Sec Web应用防火墙T-Sec 主机安全容器安全服务TCSST-Sec 安全运营中心T-Sec 漏洞扫描服务 等.

产品都有很成熟的解决方案.省时省力.

最后祝大家代码不出BUG,永远在线.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 身份验证(Authentication)和身份授权(Authorization)
    • 区别:
    • 注入缺陷(Injection Flaws)
      • 预防
      • 身份验证中断(Broken Authentication)
        • 预防
        • 跨站点脚本攻击 (XSS)
          • 预防
          • 不安全的直接对象引用
          • 安全配置错误
          • 敏感数据泄露
          • 缺少功能级的访问控制
          • 跨站点请求伪造 (CSRF)
          • 使用具有已知漏洞的程序或插件
          • 未经验证的重定向和转发
          相关产品与服务
          多因子身份认证
          多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com