2014-10-17 6 views
0

У меня есть простая страница входа на классическую страницу asp.Уязвимость Classic ASP Cookie

Он принимает поле имени пользователя из формы («ООН») и пароль («PW») и выполняет следующие действия с ними:

<% 
    un = newstr(request.form("un")) 
    pw = newstr(request.form("pw")) 

    SQL = "SELECT * from my_table WHERE un = '"&un&"' AND pw = '"&pw&"'" 
    set cRS = oConn.Execute(SQL) 

    if cRS.EOF then 
    %> 

     <p>Unable to log you in. Please <a href="default.asp">try logging in again</a>.</p> 

    <% 
    elseif NOT cRS.EOF then 

     Response.Cookies("test") = "jeQmV4'QG)Eu'N-XSTC;pZeuwqUsjBdVv>Sqr!]ZhzB{dJ'p-#cYSdwY" 
     Response.Cookies("test").Expires = Date() + 365 

     response.redirect "main.asp" 

    end if 

end if 
%> 

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

<% 
test = Request.Cookies("test") 
if test = "" OR test <> "jeQmV4'QG)Eu'N-XSTC;pZeuwqUsjBdVv>Sqr!]ZhzB{dJ'p-#cYSdwY" then response.redirect("default.asp") 
%> 

Я хотел проверить, - это то, что по наивности просто?

Может кто-то легко взломать мой сайт, например. установив файл cookie на свой компьютер под названием «test» и значение которого = «jeQmV4'QG) Eu'N-XSTC; pZeuwqUsjBdVv> Sqr!] ZhzB {dJ'p- # cYSdwY"?

Или не было бы маловероятным, чтобы кто-то догадался, что строковое значение «jeQmV4'QG» Eu'N-XSTC; pZeuwqUsjBdVv> Sqr!] ЖЖБ {dJ'p- # cYSdwY "?

Благодаря

+2

Это больше, чем уязвимость в cookie –

+0

Вы повторно используете одну и ту же строку. Правильный способ сделать то, что вы пытаетесь достичь, - это либо сеансы ASP (они будут разными для каждого пользователя), либо сделать ваш собственный ключ разным для каждого пользователя, а затем сохранить его в вашей базе данных. Это все равно будет уязвимостью cookie и приведет к захвату сеанса, если кто-то угадает ключ, но поскольку они разные для каждого пользователя, тогда угадать вряд ли. Вы можете сделать второй шаг (что делают большинство банков), обнаружив устройство (обычно IP-адрес) и убедившись, что эти элементы также совпадают перед предоставлением доступа. – Frank

ответ

4

Во-первых, кто-то может повредить вашу систему, пытаясь передать имена пользователей как

«; DROP TABLE Пользователи

http://xkcd.com/327/

Всегда, всегда используйте параметризованные запросы.

Не доверяйте пользовательскому интерфейсу за все, что связано с безопасностью. Клиент может наблюдать все файлы cookie, которые вы установили, и возвращать любые файлы cookie обратно к вам, к которому он хочет. Если это не HTTPS, кто-то посередине может также наблюдать, как cookie отправляется туда и обратно.

Не заново изобретайте рамки безопасности. Их очень сложно добиться.

+1

Спасибо за ваш ответ. То, что «newstr» представляет собой простую функцию, которая принимает входные данные и параметризует ввод. Значит, в основном куки - это пустая трата времени на безопасность? К сожалению, у меня нет возможности использовать безопасный сервер на моем сайте. Является следующей лучшей альтернативой использованию переменных сеанса? Я использовал их в прошлом, но у меня на хосте есть 15-минутный тайм-аут, который означает, что пользователи должны вести регистрацию, а также рискуют потерять данные, если они есть, например. набрал лоты, время сеанса, они отправляют форму, и они перенаправляются на страницу входа в систему ... Еще раз спасибо –

+1

Вероятно, вы имеете в виду, что 'newstr' пытается дезинформировать входные данные для предотвращения атак SQL-инъекций. Санитации недостаточно, см., Например, http://www.programmerinterview.com/index.php/database-sql/sql-injection-prevention/ Простое задание «волшебного значения» в файле cookie не является безопасным/безопасным. Является ли это «достаточно безопасным» для ваших целей, зависит от того, что вы пытаетесь защитить, и насколько это было бы плохо, если бы в него вошел определенный хакер. Существует множество * недорогих хостинг-провайдеров. Если вы не продлеваете время ожидания сеанса, ходите по магазинам. –

+1

База данных - это безопасность.Значение cookie или сеанса доступно только для удобства, поэтому пользователю не нужно вести вход в систему. Вы можете просто установить cookie равным «True» или «False», но дать cookie определенное имя, относящееся к домену. Аспект безопасности для файлов cookie вступает в игру, если машина является частной или общедоступной. Поэтому большинство пользователей спрашивают, хотите ли они «запомниться» на этом компьютере перед установкой значения. Другой метод - установить флаг в базе данных, в котором пользователь вошел в систему. Это значение также может быть очищено на основе значения времени. – Dee