Является ли этот код уязвимым для SQL-инъекций? Как бы я сделал это безопасно? - PullRequest
1 голос
/ 12 апреля 2019

У меня есть друг, которому я пытаюсь помочь в проекте, я ни в коем случае не эксперт по всестороннему тестированию, на самом деле это то, в чем я действительно новичок, но он попросил меня помочьвыявление и потенциальные проблемы безопасности с его программой.

Я не слишком уверен, но у меня есть ощущение, что, в частности, один сегмент кода уязвим для внедрения 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 Ответ

1 голос
/ 13 апреля 2019

Как санировать (не уверен на 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 '%'

Таким образом, вы можете получить данные учетной записи всех пользователей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...