데이터베이스 연결에 비밀번호 인증 모드를 사용하는 경우 안전한 비밀번호를 선택해야 합니다.
이 규칙은 빈 비밀번호를 사용할 때 문제를 발생시킵니다.
규칙을 어긴 코드
Flask-SQLAlchemy
def configure_app(app):
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://user:@domain.com" # 규칙을 어긴 코드
Django
# settings.py
DATABASES = {
'postgresql_db': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'quickdb',
'USER': 'sonarsource',
'PASSWORD': '', # 규칙을 어긴 코드
'HOST': 'localhost',
'PORT': '5432'
}
}
mysql/mysql-connector-python
from mysql.connector import connection
connection.MySQLConnection(host='localhost', user='sonarsource', password='') # 규칙을 어긴 코드
규칙을 준수한 해결책
Flask-SQLAlchemy
def configure_app(app, pwd):
app.config['SQLALCHEMY_DATABASE_URI'] = f"postgresql://user:{pwd}@domain.com" # 규칙을 준수한 코드
Django
# settings.py
import os
DATABASES = {
'postgresql_db': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'quickdb',
'USER': 'sonarsource',
'PASSWORD': os.getenv('DB_PASSWORD'), # 규칙을 준수한 코드
'HOST': 'localhost',
'PORT': '5432'
}
}
mysql/mysql-connector-python
from mysql.connector import connection
import os
db_password = os.getenv('DB_PASSWORD')
connection.MySQLConnection(host='localhost', user='sonarsource', password=db_password) # 규칙을 준수한 코드
같이보면 좋은 자료
- OWASP Top 10 2021 Category A7 - 식별 및 인증 실패
- OWASP Top 10 2017 Category A2 - 인증 실패
- OWASP Top 10 2017 Category A3 - 민감한 데이터 노출
-
MITRE, CWE-521 - 취약한 비밀번호 요구 사항
If you like SONARKUBE, don’t forget to give me a star.