上一篇 下一篇 分享链接 返回 返回顶部

SQL 注入与 XSS 的区别及防护要点

发布人:用户运营 | 723 发布时间:2小时前 阅读量:1

该文章由AI生成,仅为SEO优化测试,相关内容不保证准确!!!

引言

SQL 注入与 XSS(跨站脚本)是 Web 安全最经典的两大注入类漏洞,都源于“数据被当作代码执行”,但攻击对象完全不同:SQL 注入的目标是服务器数据库,XSS 的目标是访问网站的其他用户。防护手段也因此不同。

一、本质区别

SQL 注入:恶意输入被拼进 SQL 语句在数据库执行。攻击者直接与数据库对话,可拖库、篡改、删除数据。危害对象是服务端。
XSS:恶意脚本被注入页面,在其他用户的浏览器里执行。可窃取 Cookie、伪造操作、钓鱼。危害对象是用户端。存储型 XSS(写入数据库,所有访问者中招)危害最大,反射型(通过 URL 参数即时反射)次之,DOM 型由前端 JS 处理不当引起。

二、SQL 注入防护要点

核心是参数化查询:数据与 SQL 结构在机制上分离,用户输入永远只是数据。凡拼接 SQL 的地方都是注入点,包括排序字段、表名等标识符(用白名单映射)。辅助措施:最小权限的数据库账号(禁止 DROP/FILE 权限)、报错不回显 SQL 细节、WAF 兜底。详见站内《SQL 注入防护》一文。

三、XSS 防护要点:输出转义是核心

XSS 的根源是把用户数据未转义地输出到 HTML 中。防护核心在输出侧:1. HTML 上下文转义:输出到 HTML 正文/属性时,把 < > & " ' 转成 HTML 实体(htmlspecialchars ENT_QUOTES);2. JS 上下文:输出到 JS 字符串时用 JSON 编码并避免内联 script 拼接;3. URL 上下文:输出到 href/src 时校验协议白名单(只允许 http/https),防止 javascript: 伪协议;4. 富文本:允许用户提交 HTML 时用白名单过滤标签与属性(保留 p/b/a,剔除 script/iframe/on* 事件),用成熟的净化库而非自写正则。

CSP(内容安全策略)是强力的纵深层:响应头 Content-Security-Policy: default-src 'self'; script-src 'self' 禁止内联脚本与外部域脚本,即使有注入点也难以执行。Cookie 加 HttpOnly(JS 读不到,偷不走会话)与 SameSite。输入侧过滤(如剔除 script 字样)不可靠——编码变体极多——只能作为辅助。

四、两者的共同原则与区别记忆

共同点:都源于“数据与代码边界模糊”,都要“在正确的上下文做正确的处理”——SQL 用参数化把数据留在数据层,XSS 用上下文转义把数据留在数据层。区别记忆:SQL 注入防在进数据库之前(参数化),XSS 防在出数据库进浏览器之后(输出转义)——存进数据库的 XSS 载荷本身无害,渲染时转义即可,所以“入库时转义”反而是错误做法(会导致数据被双重转义)。

总结

SQL 注入打服务器,XSS 打用户。SQL 注入用参数化查询治本;XSS 用输出上下文转义 + CSP + HttpOnly Cookie 治本。两者都别指望“过滤关键字”这种补丁式防护——上下文处理才是正道。

目录结构
全文
微信公众号 微信公众号
抖音官方账号 抖音官方账号
CSDN官方账号 CSDN官方账号
经营主体身份码 经营主体身份码
电子邮箱: admin@2v8.cn

本页面部分展示信息可能存在偏差/错误