Найдите ошибки и/или уязвимости
От: Hottabych1  
Дата: 20.01.07 17:56
Оценка:
Этот вопрос вам могут задать на собеседовании в компании "Крок" и предложить примерно вот такой кусок кода:

using System;
using System.IO;
using System.Data.SqlClient;

namespace Test
{
    class Program
    {
        public string Main(string strName)
        {
            SqlConnection cn = new SqlConnection("Data Source=.; Initial Catalog=SomeDb; User ID=sa; PWD=.;");
            SqlCommand cmd = new SqlCommand("select somecolumn from sometable where somefield = "
                + strName);
            SqlDataReader datareader = cmd.ExecuteReader();
            datareader.Read();
            return datareader.GetValue(0).ToString();
        }
    }
}
Re: Найдите ошибки и/или уязвимости
От: adontz Грузия http://adontz.wordpress.com/
Дата: 20.01.07 18:08
Оценка: +1 :)))
Здравствуйте, Hottabych1, Вы писали:

Как? Есть места где не используют BLT?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Найдите ошибки и/или уязвимости
От: DrDred Россия  
Дата: 20.01.07 18:25
Оценка: +1
Здравствуйте, Hottabych1, Вы писали:

H>Этот вопрос вам могут задать на собеседовании в компании "Крок" и предложить примерно вот такой кусок кода:


H>
H>using System;
H>using System.IO;
H>using System.Data.SqlClient;

H>namespace Test
H>{
H>    class Program
H>    {
H>        public string Main(string strName)
H>        {
H>            SqlConnection cn = new SqlConnection("Data Source=.; Initial Catalog=SomeDb; User ID=sa; PWD=.;");
H>            SqlCommand cmd = new SqlCommand("select somecolumn from sometable where somefield = "
H>                + strName);
H>            SqlDataReader datareader = cmd.ExecuteReader();
H>            datareader.Read();
H>            return datareader.GetValue(0).ToString();
H>        }
H>    }
H>}
H>

Ну ладно, развлечемся немного...
— using не используется
— склейка запроса вместо использования параметров (строка, да еще от клиента, да еще незаэскейпленная, страшный сон вобщем....)
— использование позиционного обращения к результатам вместо поименованного
— не проверяется возвращенное значение на NULL
— нет вообще никакой обработки исключений
— сигнатура Main вообще-то другая

кто больше?
... << RSDN@Home 1.2.0 alpha rev. 672>>
--
WBR, Alexander
Re: Найдите ошибки и/или уязвимости
От: HAN-BRATAN Украина http://bookkeeper.com.ua
Дата: 20.01.07 18:29
Оценка:
Здравствуйте, Hottabych1, Вы писали:

H>Этот вопрос вам могут задать на собеседовании в компании "Крок" и предложить примерно вот такой кусок кода:


Весть этот код сплошная ошибка.

А уязвимость... Не вижу где закрывается datareader.
Re: Найдите ошибки и/или уязвимости
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 20.01.07 23:38
Оценка:
Здравствуйте, Hottabych1, Вы писали:

strName = "0 \r\nDrop sometable"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Найдите ошибки и/или уязвимости
От: Viper84 Россия  
Дата: 21.01.07 00:07
Оценка: -1
Здравствуйте, Hottabych1, Вы писали:

H>
H>        public string Main(string strName)
H>        {
H>            SqlConnection cn = new SqlConnection("Data Source=.; Initial Catalog=SomeDb; User ID=sa; PWD=.;");
H>            SqlCommand cmd = new SqlCommand("select somecolumn from sometable where somefield = "
H>                + strName);
H>            SqlDataReader datareader = cmd.ExecuteReader();
H>            datareader.Read();
H>            return datareader.GetValue(0).ToString();
H>        }
H>


— хардкод конекшен ытринга никуда не годится
— и я так и не уловил где используется етот самый конекшен, соответственно нет конекта нет соединения я уж не говорю что вообщето конект открывать и закрывать
— что-то непонятная функция майн

а вообще ошибка помоему в ДНК
Re[2]: Найдите ошибки и/или уязвимости
От: _FRED_ Черногория
Дата: 21.01.07 01:12
Оценка:
Здравствуйте, DrDred, Вы писали:

H>>            return datareader.GetValue(0).ToString();
H>>


DD>- не проверяется возвращенное значение на NULL

Не это (datareader.GetValue(0)) ли значение имеется в виду? Тогда ответ не верный: этот метод не возвращает null:

Return Value
This method returns DBNull for null database columns.

Help will always be given at Hogwarts to those who ask for it.
Re: Найдите ошибки и/или уязвимости
От: Alex Dav Россия  
Дата: 22.01.07 07:32
Оценка:
А не подскажите, для общего, так сказать развития, что значит

Data Source=.;



Спасибо.
Re: Найдите ошибки и/или уязвимости
От: Janii  
Дата: 22.01.07 07:42
Оценка:
Здравствуйте, Hottabych1, Вы писали:

H>
H>using System;
H>using System.IO;
H>using System.Data.SqlClient;

H>namespace Test
H>{
H>    class Program
H>    {
H>        public string Main(string strName)
H>        {
H>            SqlConnection cn = new SqlConnection("Data Source=.; Initial Catalog=SomeDb; User ID=sa; PWD=.;");
H>            SqlCommand cmd = new SqlCommand("select somecolumn from sometable where somefield = "
H>                + strName);
H>            SqlDataReader datareader = cmd.ExecuteReader();
H>            datareader.Read();
H>            return datareader.GetValue(0).ToString();
H>        }
H>    }
H>}
H>



Ну разве что для развлечения

1. Формально это, конечно, не ощибка, но функция Main, определенная таким вот образом, не является валидной точкой входа приложения. Да, в условиях задачи нигде не сказано, что она таковой подразумевается, но здравый смысл это подсказывает.
2. Захардкоденная строка соединения с БД — дурной тон.
3. SqlConnection надо открывать и закрывать. Для корректного закрытия просто напрашивается использование using.
4. Текст SqlCommand получается конкатенацией строки и нигде не проверяется. Тем самым открывается путь для SQL injection.
5. Созданный экземпляр SqlCommand никак не привязывается к экземпляру SqlConnection. Метод ExecuteReader бросит ошибку.
6. SqlCommand реализует IDisposable, поэтому желательно использовать using.
7. SqlDataReader реализует IDisposable, поэтому желательно использовать using (или закрывать ридер явно).
8. Нет проверки на то, что SqlDataReader вернул хоть один рекорд. Поэтому метод dataReader.GetValue(0) вполне может кинуть ошибку.
9. Нет вообще никакой обработки ошибок.
Re[2]: Найдите ошибки и/или уязвимости
От: _FRED_ Черногория
Дата: 22.01.07 08:08
Оценка:
Здравствуйте, Alex Dav, Вы писали:

AD>А не подскажите, для общего, так сказать развития, что значит

AD>Data Source=.;


То же, что и "(local)": default instance локального сервера. Именованный инстанс можно обозначать как ".\InstanceName".
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re: Найдите ошибки и/или уязвимости
От: Аноним  
Дата: 20.01.07 19:54
Оценка:
А про cn.Open() все как-то забыли :D


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.