相关疑难解决方法(0)

如何在PHP中阻止SQL注入?

如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)

这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)

可以采取哪些措施来防止这种情况发生?

php mysql sql security sql-injection

2776
推荐指数
28
解决办法
166万
查看次数

如何在SQLAlchemy-flask应用程序中执行原始SQL

如何在SQLAlchemy中执行原始SQL?

我有一个python web应用程序,它运行在烧瓶上,并通过SQLAlchemy与数据库连接.

我需要一种方法来运行原始SQL.该查询涉及多个表连接以及内联视图.

我试过了:

connection = db.session.connection()
connection.execute( <sql here> )
Run Code Online (Sandbox Code Playgroud)

但我不断收到网关错误.

python sql sqlalchemy flask flask-sqlalchemy

193
推荐指数
6
解决办法
22万
查看次数

准备好的语句如何防止SQL注入攻击?

准备语句如何帮助我们防止SQL注入攻击?

维基百科说:

准备好的语句对SQL注入具有弹性,因为稍后使用不同协议传输的参数值无需正确转义.如果原始语句模板不是从外部输入派生的,则不能进行SQL注入.

我看不清楚原因.简单的英语和一些例子中有什么简单的解释?

sql security sql-injection prepared-statement

151
推荐指数
5
解决办法
10万
查看次数

Python中预准备语句和参数化查询之间的混淆

据我所知,预备语句(主要)是一个数据库功能,允许您将参数与使用此类参数的代码分开.例:

PREPARE fooplan (int, text, bool, numeric) AS
    INSERT INTO foo VALUES($1, $2, $3, $4);
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);
Run Code Online (Sandbox Code Playgroud)

参数化查询替代手动字符串插值,因此不是这样做

cursor.execute("SELECT FROM tablename WHERE fieldname = %s" % value)
Run Code Online (Sandbox Code Playgroud)

我们可以做的

cursor.execute("SELECT FROM tablename WHERE fieldname = %s", [value])
Run Code Online (Sandbox Code Playgroud)

现在,似乎准备好的语句大部分都用在数据库语言中,参数化查询主要用于连接数据库的编程语言,尽管我已经看到了这个规则的例外.

问题在于询问预准备语句和参数化查询之间的区别会带来很多混乱.他们的目的无疑是相同的,但他们的方法似乎是截然不同的.然而,有消息表明两者都是相同的.MySQLdb和Psycopg2似乎支持参数化查询,但不支持预处理语句(例如,这里是MySQLdb和postgres驱动程序TODO列表或sqlalchemy 组中的这个答案).实际上,有一个实现psycopg2游标的要点,支持准备好的语句和关于它的最小解释.还有一个建议是在psycopg2中继承游标对象以手动提供准备好的语句.

我想得到以下问题的权威答案:

  • 预准备语句和参数化查询之间是否存在有意义的区别?这在实践中是否重要?如果使用参数化查询,是否需要担心预处理语句?

  • 如果存在差异,Python生态系统中预准备语句的当前状态是什么?哪些数据库适配器支持预处理语

python database sql-injection prepared-statement parameterized-query

20
推荐指数
2
解决办法
1万
查看次数

MYSQL使用变量更新多个列

我使用此查询将所有值插入此数据库:

INSERT INTO products ($fields) VALUES ($values)
Run Code Online (Sandbox Code Playgroud)

但是,我尝试使用相同的格式进行更新:

UPDATE products SET ($fields) VALUES ($values) WHERE sku = '$checksku'
Run Code Online (Sandbox Code Playgroud)

...而且我遇到了语法错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('product,make,model,' at line 1
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚.非常感谢任何帮助.谢谢.

mysql variables variable-assignment multiple-columns

14
推荐指数
1
解决办法
3万
查看次数

参数化查询的示例

有谁能举例说明如何使用MySQL/PHP参数化查询?

php mysql parameterized-query

5
推荐指数
1
解决办法
5725
查看次数

LINQ将字符串转换为特殊字符

我正在使用此查询从数据库中获取数据.

string nfc = "53f8372c";    
var temp = db.tempTable.AsNoTracking().Where(
               x =>
                   x.uid.Equals(nfc, StringComparison.CurrentCultureIgnoreCase)
                   && x.ENDED == null
                   && x.STATUS.Equals(Constants.ACTIVE)
              );
Run Code Online (Sandbox Code Playgroud)

从此查询生成的sql是:

{SELECT 
"Extent1"."ID" AS "ID", 
"Extent1"."uid" AS "uid", 
"Extent1"."ENDED" AS "ENDED", 
"Extent1"."STATUS" AS "STATUS", 
FROM "tempTable" "Extent1"
WHERE (("Extent1"."uid" = :p__linq__0) AND ("Extent1"."ENDED" IS NULL) AND ('Active' = "Extent1"."STATUS"))}
Run Code Online (Sandbox Code Playgroud)

为什么它将53f8372c转换为:p__linq__0

c# linq oracle entity-framework entity-framework-6

0
推荐指数
1
解决办法
206
查看次数