You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现SQL注入并获取数据表数据?尝试注入失败求助

为什么你的SQL注入尝试失败?
  • 核心原因:你用了参数化查询
    你的代码里执行SQL的部分是:

    c.execute(f"SELECT * from EMPLOYEE WHERE FIRST_NAME=:Name",{"Name":Name})
    

    这里的:Name是SQLite支持的命名参数占位符,属于参数化查询范畴。数据库驱动会把SQL语句结构和参数值完全分开处理:

    1. 先编译固定结构的SQL语句(底层会把命名参数转换为通用占位符)
    2. 再把Name的值作为纯数据传入,不会被解析成SQL语法的一部分。
  • 你的注入语句只会被当作查询值
    不管你把Name改成什么注入字符串,比如' or 1=1--,数据库只会去查找FIRST_NAME字段等于这个字符串的记录,不会把or 1=1当作SQL逻辑执行。你尝试的所有注入语句,最终都只是普通的字符串查询条件,自然无法返回全表数据。

  • 如果想测试注入效果,需用不安全的字符串拼接(仅用于学习测试)
    只有当你直接拼接字符串生成SQL时,注入才会生效。比如把代码改成:

    c.execute(f"SELECT * from EMPLOYEE WHERE FIRST_NAME='{Name}'")
    

    此时若将Name设为' or 1=1--,拼接后的SQL会变成:

    SELECT * from EMPLOYEE WHERE FIRST_NAME='' or 1=1--'
    

    这里1=1永远为真,--注释掉后续的单引号,就能返回全表数据。但这种写法在实际开发中绝对禁止,会引发严重安全风险。

  • 结论
    你的代码已经通过参数化查询完美防御了SQL注入,这是正确的开发规范。你的注入尝试失败,恰恰说明这个安全机制在正常工作。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:22:09