sql注入漏洞产生原因应用程序将用户输入(如表单字段,URL参数,Cookie)未经充分验证或转义,直接拼接到sql查询语句中
开发者过度信任用户输入
漏洞原理攻击者构造包含恶意的sql代码的特殊输入(payload),当恶意输入被拼接到sql语句中并发送到数据库中执行的时候,攻击者可以修改原始查询的逻辑,执行非预期的sql操作,比如查询,修改,删除数据,甚至执行数据库管理命令。
漏洞危害数据泄露:窃取敏感信息(用户凭证,个人信息,商业机密)数据篡改:修改,删除数据库内容,(如篡改价格,删除用户等)权限提升:利用数据库特性执行系统命令,获取服务器控制权拒绝服务:执行消耗大量资源的查询导致数据库瘫痪防御措施1.参数化查询:使用数据库驱动提供的参数化接口,将sql语句结构与数据分离
2.输入验证与过滤:对用户的输入进行严格的类型,格式,长度检查(白名单优于黑名单),但不能完全依赖
3.最小权限原则:数据库连接账户使用最低必要权限(避免使用root、sa)
4.ORM框架:使用成熟的ORM(如Hibernate,entity Framework)自动处理参数化
5.转义:在特定情况下(如无法参数化时)对特殊字符进行转义
6.web应用防火墙:部署WAF检测和拦截常见的sql注入攻击模式
RCE远程代码执行漏洞产生原因应用程序将用户可控的输入直接或间接传递给能执行系统命令,代码解释或反序列化的危险函数/接口
存在允许上传和执行恶意文件(如webshell)的漏洞,常与文件上传漏洞结合
依赖存在已知RCE漏洞的第三方组件(库,框架,服务器软件)
漏洞原理攻击者构造特殊的输入,比如精心设计的命令参数,序列化数据,恶意脚本文件
当应用程序在处理这些输入的时候,调用了系统命令执行函数,如system(),exec(),代码执行函数如eval()或加载了恶意文件,导致攻击者的任意代码在服务器操作系统层面被执行。
漏洞危害完全控制服务器:获取操作系统最高权限(root/Administrator)数据窃取与破坏:读取,修改,删除服务器上所有文件植入后门或挖矿木马:长期控制或利用服务器资源内网渗透跳板:攻击内部网络其他系统防御措施1.避免使用危险函数,除非绝对必要且安全可控
常见危险函数有:
命令执行函数:system(),exec(),shell_exec()
代码执行函数:eval(),assert(),call_user_function()
2.严格输入验证与过滤:对传入的命令,代码,序列化数据的参数进行严格检查
3.最小权限原则:web服务器进程以低权限用户运行
4.文件上传安全:严格控制文件上传(类型,内容,存储位置,执行权限)
XSS跨站脚本攻击产生原因存储型、反射型:应用程序将用户提交的数据,未经验证或转义,直接输出到HTML页面当中
DOM型:客户端JS不安全的操作DOM,将URL参数等不可信数据当作HTML/JS代码插入到页面
漏洞原理攻击者构造包含恶意JS代码的输入
当其他的用户访问包含此恶意代码的页面时,浏览器会将该代码当作页面的一部分执行
恶意脚本在受害用户的浏览器上下文中运行,可以窃取其cookie,会话token,修改页面内容,发起恶意请求,重定向到钓鱼网站等
漏洞危害会话劫持:窃取用户的会话cookie,冒充用户登录
钓鱼攻击:伪造登录框窃取凭证
敏感信息窃取:窃取页面内容,表单数据,本地存储
键盘记录:记录用户输入
网站挂马/挖矿
防御措施1.对输出进行编码或转义:根据输出位置(HTML正文、HTML属性、JavaScript、CSS、URL),使用对应的编码函数,如HtmlEncode, JavaScriptEncode, UrlEncode
2.对输入进行验证:对用户输入进行严格检查,如类型,长度,格式等,但是不能替代输出编码
3.HttpOnly Cookie:标记敏感cookie为httponly,防止JS访问
4.内容安全策略(CSP):通过HTTP头定义允许加载脚本,样式等资源的来源
5.使用安全框架:现代框架(React,Vue,Angular)通常有内置的XSS防护机制
CSRF跨站请求伪造产生原因当用户登录一个网站后,网站会认为来自该用户浏览器的请求都是经过用户授权的合法操作。这是因为浏览器在发送请求时会自动带上用户的会话信息(如 Cookie),而网站依赖这些信息来识别用户身份并提供服务。
攻击者可以利用用户对网站的信任,诱导用户访问恶意网站或执行恶意操作。例如,在论坛中发布包含恶意链接的帖子,或者通过邮件、即时通讯工具发送恶意链接。当用户点击这些链接时,攻击者就可以利用用户的会话信息来伪造请求。
漏洞原理用户登录目标网站A,浏览器保存了会话cookie
用户访问了恶意网站B
网站B的页面中包含一个自动提交的表单或/