此代码容易受到SQL注入的攻击吗?我要如何确保它安全?

时间:2019-04-12 12:24:57

标签: c++ mysql sql sql-injection

我有一个朋友正在尝试为一个项目提供帮助,我绝对不是渗透测试方面的专家,事实上,这确实是我的新手,但他要我帮助在他的程序中找出潜在的安全问题。

我不太确定,但是我有一种感觉,特别是一段代码容易受到SQL注入的攻击,我想知道是否有人可以提供示例说明如何受到攻击(如果存在)以及任何建议关于如何清理输入内容。

这是代码段

nextwork:
        cDataBase *db = NewManagerDB();
        if( !db->QueryDirect( dbginfo,  "SELECT * FROM Account WHERE UserID = '%s'", szManagerID ) )
        {
                ErrDB(db);
                DelManagerDB(db);
                if( Retire == MAX_RETIRE )
                {
                        LOG("QueryDirect error MAX_RETIRE db QueryDirect failed");
                        SendManagerAuthenResult( MgrCode::SvrError );                        
                        return;
                }
                Retire++;
                goto nextwork;
        }

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如何消毒(不确定100%如何使用特定的db类实现)

        db->Parameters.AddWithValue("@userid", szManagerID);  
        if( !db->QueryDirect( dbginfo,  "SELECT * FROM Account WHERE UserID = @userid" ) )

以下是SQL注入的示例:

szManagerID = "' OR UserID LIKE '%";

结果查询将是:

SELECT * FROM Account WHERE UserID = '' OR UserID LIKE '%'

因此您可以获得所有用户的帐户数据