在当今数字化时代,随着互联网的不断蓬勃发展,网站已经成为了人们获取信息、交流互动的主要渠道之一。然而,随之而来的是网站安全问题的日益突显。作为开发者,我们在构建和维护网站的过程中,必须时刻将安全性置于首要位置。毕竟,一台充满创意和功能的网站,如果无法确保用户数据的保密性和整体系统的稳固性,很可能会陷入不安全的境地。
在看了青训营相关课程之后,我在这里总结一下几大常见Web漏洞~
我们将聚焦于以下几个方面:第三方组件漏洞、SQL 注入、越权漏洞、SSRF(Server-Side Request Forgery)以及文件上传漏洞。
第三方组件漏洞
第三方组件漏洞指的是网站中所使用的来自外部供应商或开源社区的软件、库、框架等组件存在的漏洞。这些组件通常为了加速开发进程、增加功能或者降低成本而被引入,但却可能成为Hack们攻击的入口。
在使用一些第三方SDK时,由于SDK存在的可能的漏洞,因此我们可能会被“连坐”。因此我们应该选择正规的SDK/库/包。
SQL注入
SQL 注入是一种常见且危险的网络攻击,针对的是使用了结构化查询语言(SQL)的应用程序,例如网站的数据库查询功能。
比如: 对于以下原始QUERY:
SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';
攻击者可能会尝试注入恶意代码来绕过密码验证,例如输入:
用户名: ' OR '1'='1
密码: 任意密码
会被篡改成:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '任意密码';
'1'='1' 总是为真,因此 WHERE 子句的后半部分永远成立。这意味着攻击者可以通过输入上述恶意的用户名,成功绕过密码验证,从而获得访问权限,即使他们没有提供正确的密码。
现在的ORM框架一般会有相应的手段防范SQL注入的发生,但是我们仍然应该时刻保持注意。
越权漏洞
顾名思义,越权漏洞是指恶意用户通过利用应用程序设计上的缺陷,获得未经授权的权限或者访问受限资源的能力。这种漏洞可能允许攻击者绕过正常的权限控制机制,从而访问他们本不应该访问的敏感数据或执行操作。
比如我们有一个私人profile,不想给除受信任的人外的任何人看。 然而:
查看自己的个人信息:`/profile?user_id=当前用户ID`
查看其他用户的个人信息:`/profile?user_id=其他用户ID`
emmm 如果没有鉴权,那么每个人其实都能看到你的profile。 因此要在后端鉴权!
SSRF
服务器端请求伪造。攻击者可以利用此漏洞发起伪造的请求,使目标服务器执行不受控制的操作。SSRF 漏洞通常出现在允许用户提供 URL 的场景中,例如通过用户输入的 URL 来获取远程内容或与其他服务进行通信。 例如,假设一个网站允许用户提交一个 URL,用于获取远程页面的内容:
https://example.com/fetch?url=恶意URL
如果没有正确的输入验证和安全措施,攻击者可以提交如下 URL:
https://example.com/fetch?url=http://localhost/admin
emmmmmm, 这导致攻击者可能获取敏感信息或触发未授权的操作:(
文件上传漏洞
这个容易理解。如果文件上传接口没有文件验证,攻击者可以上传一个bash、sh脚本、php文件、带有恶意js的html文件来间接上传病毒。