【问题标题】:Sanitize password string in cpp在 cpp 中清理密码字符串
【发布时间】:2018-07-31 19:49:57
【问题描述】:

我有一个字符串,

userStmt:

SELECT * FROM RUN_ON_HIVE(SERVER('10.23.40.23'),USERNAME('user'),PASSWORD('pass'),DBNAME('default'),QUERY('ANALYZE TABLE default.test01 COMPUTE STATISTICS'));

我正在尝试将密码子句转换为“****”。

String sanitizeduserstmt=userStmt;
  boost::regex pw_re("PASSWORD\\('[^']*'\\)");
  boost::regex_replace(sanitizeduserstmt, pw_re, "PASSWORD('****')");

但这不起作用。有人可以告诉我我哪里出错了吗? TIA

【问题讨论】:

  • 不是:boost::regex_replace(sanitizeduserstmt, pw_re, "PASSWORD('****')");这条线干吗?
  • 这听起来像是一个非常糟糕的主意。只是不要记录 SQL 语句(使用准备好的语句)。此外,如果您在服务器软件的任何地方都有明文密码,99.99999% 的情况下这是一个安全漏洞。

标签: c++ regex boost


【解决方案1】:

boost::regex_replace 方法不会就地修改输入字符串,需要将值赋回变量。

在你的情况下,修复看起来像

#include <boost/regex.hpp>
#include <iostream>
using namespace std;

int main() {
    string sanitizeduserstmt="SELECT * FROM RUN_ON_HIVE(SERVER('10.23.40.23'),USERNAME('user'),PASSWORD('pass'),DBNAME('default'),QUERY('ANALYZE TABLE default.test01 COMPUTE STATISTICS'));";
    boost::regex pw_re("PASSWORD\\('[^']*'\\)");
    sanitizeduserstmt=boost::regex_replace(sanitizeduserstmt, pw_re, "PASSWORD('****')");
    std::cout << "Result: " << sanitizeduserstmt << "\n";
    // => Result: SELECT * FROM RUN_ON_HIVE(SERVER('10.23.40.23'),USERNAME('user'),PASSWORD('****'),DBNAME('default'),QUERY('ANALYZE TABLE default.test01 COMPUTE STATISTICS'));
}

请参阅Coliru demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多