首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消毒MySQL存储过程参数

消毒MySQL存储过程参数
EN

Stack Overflow用户
提问于 2017-11-01 19:59:54
回答 2查看 1.2K关注 0票数 1

我正在处理一个存储过程,它根据输入参数的值动态生成查询。sp使用mysql中的CONCAT()函数来构建查询。其中一个参数允许用户输入一个搜索字符串作为varchar数据类型。

mysql中是否有类似于php的mysql_real_escape_string()的功能来防止sql注入攻击?

下面是这个sp正在做什么的一个例子:

//试图张贴代码。继续被拒绝。不告诉我原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-01 20:26:41

关于你的评论:

我同意你的意见,但是,你如何才能根据输入在准备好的陈述中添加特定的部分。例如,如果参数_A和_B可用,那么连接两个额外的表并包含一个WHERE语句?然后知道运行准备语句的查询的哪个版本,以知道需要绑定哪些参数?

有时您必须使用有条件的代码块:

代码语言:javascript
复制
CREATE PROCEDURE MyProc(IN _A INT, IN _B INT)
BEGIN
  IF _A IS NOT NULL AND _B IS NOT NULL
    PREPARE stmt1 FROM 'SELECT * FROM MyTable WHERE A = ? AND B = ?';
    SET @A = _A, @B = _B;
    EXECUTE stmt1 USING @A, @B;
    DEALLOCATE PREPARE stmt1;
  ELSEIF _A IS NOT NULL
    PREPARE stmt1 FROM 'SELECT * FROM MyTable WHERE A = ?';
    SET @A = _A;
    EXECUTE stmt1 USING @A;
    DEALLOCATE PREPARE stmt1;
  ELSEIF _B IS NOT NULL
    PREPARE stmt1 FROM 'SELECT * FROM MyTable WHERE B = ?';
    SET @B = _B;
    EXECUTE stmt1 USING @B;
    DEALLOCATE PREPARE stmt1;
  END
END

对于有条件限制和偏移的示例,您可以做得更简单。不存在来自受INT数据类型约束的输入参数的SQL注入风险。然后,您可以通过使用COALESCE()来使用一些合理的值来默认变量。

代码语言:javascript
复制
CREATE PROCEDURE MyProc(INT _quick_search VARCHAR(50),
  IN _limit INT, IN _offset INT)
BEGIN
  SET @LIMIT = COALESCE(_limit, 1);
  SET @OFFSET = COALESCE(_offset, 0);

  PREPARE stmt1 FROM 'SELECT ...blah blah... LIMIT ? OFFSET ?';
  EXECUTE stmt1 USING @LIMIT, @OFFSET;
  DEALLOCATE PREPARE stmt1;
END

我同意@YourCommonSense的说法,即存储过程不是最好的解决方案。MySQL的存储过程实现是原始的,很难使用。我在Stack溢出上看到许多问题,询问如何在MySQL中执行存储过程中的一些任务,这让我每次都感到畏缩。

您最好使用几乎任何其他脚本语言,而不是使用MySQL存储过程。

票数 3
EN

Stack Overflow用户

发布于 2017-11-01 20:05:54

不要使用CONCAT()函数来构建查询。

使用。准备好了。语句。

代码语言:javascript
复制
PREPARE stmt1 FROM 'SELECT * FROM whatever WHERE something LIKE ?';
EXECUTE stmt1 USING @search_parameter;
DEALLOCATE PREPARE stmt1;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47062748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档