gpt4 book ai didi

python - 检测源代码中的 SQL 注入(inject)

转载 作者:太空狗 更新时间:2023-10-29 18:22:06 26 4
gpt4 key购买 nike

考虑以下代码片段:

import MySQLdb

def get_data(id):
db = MySQLdb.connect(db='TEST')
cursor = db.cursor()
cursor.execute("SELECT * FROM TEST WHERE ID = '%s'" % id)

return cursor.fetchall()

print(get_data(1))

代码中存在一个主要问题 - 它容易受到 SQL 注入(inject)攻击,因为查询不是通过 DB API 参数化的,而是通过字符串格式构造的。如果您以这种方式调用该函数:

get_data("'; DROP TABLE TEST -- ")

将执行以下查询:

SELECT * FROM TEST WHERE ID = ''; DROP TABLE TEST --  

现在,我的目标是分析项目中的代码并检测所有可能易受 SQL 注入(inject)攻击的地方。换句话说,查询是通过字符串格式构造的,而不是在单独的参数中传递查询参数。

是否可以借助 pylintpyflakes 或任何其他静态代码分析包静态解决?


我知道 sqlmap流行的渗透测试工具,但据我所知,它是针对网络资源工作的,通过 HTTP 请求将其作为黑盒进行测试。

最佳答案

有一个工具可以准确解决问题,py-find-injection :

py_find_injection uses various heuristics to look for SQL injection vulnerabilities in python source code.

它使用 ast module , 查找session.execute()cursor.execute() 调用,并检查里面的查询是否通过string interpolation, concatenation or format() 形成.

这是检查问题中的片段时输出的内容:

$ py-find-injection test.py
test.py:6 string interpolation of SQL query
1 total errors

尽管该项目未得到积极维护,但可以用作起点。一个好主意是用它制作一个 pylintpyflakes 插件。

关于python - 检测源代码中的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com