- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
正如标题所暗示的,我想知道这段代码是否存在 SQL 注入(inject)漏洞?如果是这样,是否有更好、更安全的方法来实现同样的目标?
def add(table,*args):
statement="INSERT INTO %s VALUES %s" % (table,args)
cursor.execute(statement)
最佳答案
是的,是的。使用这样的东西来防止它:
cursor.execute("INSERT INTO table VALUES ?", args)
注意不能这样输入表格。理想情况下,表格应该是硬编码的,在任何情况下都不应来自任何类型的用户输入。您可以使用类似于您为表所做的字符串,但您最好 100% 确定用户无法以某种方式更改它...参见 Can I use parameters for the table name in sqlite3?更多细节。
本质上,您希望将参数放在游标命令中,因为这将确保数据数据库安全。使用您的第一个命令,创建一个特殊的 table
或 args
将一些不安全的内容放入您的 SQL 代码中会相对容易。查看python pages ,以及引用的 http://xkcd.com/327/ .具体来说,python 页面引用:
Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack (see http://xkcd.com/327/ for humorous example of what can go wrong).
Instead, use the DB-API’s parameter substitution. Put ? as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’s execute() method. (Other database modules may use a different placeholder, such as %s or :1.)
基本上,有人可以设置一个执行另一个命令的参数,像这样:
args="name; DELETE table"
使用 cursor.execute 将填充给定的值,这样参数就可以像列出的那样,当你对其进行查询时,这正是你将得到的结果。 XKCD也幽默地解释了这一点。
关于python - 这段 Python 代码容易受到 SQL 注入(inject)的攻击吗? (SQLite3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13613037/
所以我试图让(例如)输入一些值:1 -2 -3 2 5正数的数量是 5 负数的数量是 -3总计为 3 平均值为 0.6我想让它像这样,但是当我运行它时,它不起作用哪一部分是错误的??? import
我编写了一个使用 OpenCV 的 cvCalcOpticalFlowLK 的程序。它在低分辨率网络摄像头输入上表现良好,但我需要在全高清流上运行它,并在对每一帧进行光流分析后进行重要的其他计算。处理
如果我有一个 ruby 脚本 Daemon,顾名思义,它作为守护进程运行,监视系统的各个部分并能够执行需要身份验证的命令,例如更改权限,是否存在一个简单的方法来拥有第二个 ruby 脚本,比如
我们有一个基于 Ant 和 Ivy 的构建管理系统,它基本上由一个共享的 ant 文件和一组围绕目录结构的约定组成。 我试图克服的一个障碍是相当常见的“递归发布”情况。比如说,我们有 5 个内部代码模
我在嵌入式 Linux 环境中遇到了问题。尝试确定它是否可以由应用程序引起。应用程序导致内核崩溃/锁定或终止 init 有多容易? 最佳答案 非根应用程序应该不可能影响任何一个。 以 root 身份运
我目前正在尝试学习 Nim(进展缓慢 - 无法投入太多时间)。另一方面,为了获得一些工作代码,我想对我正在 ruby 中开发的 Nim 应用程序的各个部分进行原型(prototype)设计。 由于
我是一名优秀的程序员,十分优秀!