diff --git a/docker-compose.yml b/docker-compose.yml index 1b3e2a84..fb140df7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,9 @@ services: redis: image: redis:alpine + security_opt: + - no-new-privileges:true + read_only: true sqli: build: @@ -22,3 +25,4 @@ services: - 8080:8080 command: | wait-for postgres:5432 -- python run.py + diff --git a/sqli/dao/student.py b/sqli/dao/student.py index d41ef885..55d67a3c 100644 --- a/sqli/dao/student.py +++ b/sqli/dao/student.py @@ -40,8 +40,9 @@ async def get_many(conn: Connection, limit: Optional[int] = None, @staticmethod async def create(conn: Connection, name: str): q = ("INSERT INTO students (name) " - "VALUES ('%(name)s')" % {'name': name}) + "VALUES (%s)") async with conn.cursor() as cur: - await cur.execute(q) + await cur.execute(q, (name,)) + diff --git a/sqli/dao/user.py b/sqli/dao/user.py index c663ddc3..1e2565c6 100644 --- a/sqli/dao/user.py +++ b/sqli/dao/user.py @@ -1,4 +1,4 @@ -from hashlib import md5 +from hashlib import md5, scrypt from typing import NamedTuple, Optional from aiopg import Connection @@ -38,4 +38,5 @@ async def get_by_username(conn: Connection, username: str): return User.from_raw(await cur.fetchone()) def check_password(self, password: str): - return self.pwd_hash == md5(password.encode('utf-8')).hexdigest() + return self.pwd_hash == scrypt(password.encode('utf-8'), salt=b'some_salt', n=16384, r=8, p=1).hex() +