Аутентификация в Web.py - будет ли этот код небезопасным для производства? - PullRequest
3 голосов
/ 07 октября 2010

Я делаю простое веб-приложение, которое требует входа на страницу администратора. Я сталкивался с этим заклинанием на сайте web.py (http://webpy.org/cookbook/userauth):

import hashlib
import web    

def POST(self):
    i = web.input()

    authdb = sqlite3.connect('users.db')
    pwdhash = hashlib.md5(i.password).hexdigest()
    check = authdb.execute('select * from users where username=? and password=?', (i.username, pwdhash))
    if check: 
        session.loggedin = True
        session.username = i.username
        raise web.seeother('/results')   
    else: return render.base("Those login details don't work.")

Однако на странице также содержится несколько зловещее предупреждение: «Не используйте этот код на реальном сайте - это только для иллюстрации». Мне было интересно, есть ли в этом какие-то серьезные пробелы, я немного незнаком с веб-программированием, поэтому просто хотел убедиться, что использование этого кода невольно сделает приложение открытым для тривиальных векторов атаки?

Большое спасибо

Ответы [ 3 ]

3 голосов
/ 22 марта 2013

выберите * из пользователей, где имя пользователя =? и пароль =? ', (имя пользователя, pwdhash)

^ SQL-инъекция, братан. Если кто-то введет «или 1 = 1» в поле поиска, он получит первый результат для пользователей из-за SELECT * из. Часто первая запись - это учетные данные администратора.

1 голос
/ 07 октября 2010

Единственная очевидная проблема, которую я вижу, состоит в том, что пароль хранится как простой хеш MD5 без соли. С вашей точки зрения, это не такая уж большая проблема, но с точки зрения пользователя это серьезный недостаток безопасности, поскольку кто-то, имеющий доступ к базе данных, может довольно легко взломать достаточно плохие пароли, просто прибегая к поиску хешей MD5.

0 голосов
/ 07 октября 2010

Единственная возможная проблема, о которой я могу подумать, может состоять в том, чтобы можно было как-то использовать MD5-коллизии , то есть, что две разные строки могут генерировать один и тот же хэш MD5 - в этом случае кто-то потенциально может Войдите в систему с неверным паролем, но сгенерируйте тот же хеш MD5.

Переход на более качественный алгоритм хеширования, такой как SHA-1 (или что-то еще доступное в hashlib ), может закрыть эту потенциальную проблему безопасности.

Насколько я знаю, было бы очень трудно использовать проблему столкновения MD5 для получения доступа. Тем не менее, он не работает и цитирует гуру безопасности Брюс Шнайер из статьи в Википедии:

[он] писал об атаке, что «[мы] уже знали, что MD5 - это сломанная хеш-функция» и что «никто больше не должен использовать MD5».

...