diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6bdeb553d285f3c59feca87dd5d4188db691168 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,16 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true"> + <option name="ignoredPackages"> + <value> + <list size="3"> + <item index="0" class="java.lang.String" itemvalue="python-ldap" /> + <item index="1" class="java.lang.String" itemvalue="django-auth-ldap" /> + <item index="2" class="java.lang.String" itemvalue="RPi.GPIO" /> + </list> + </value> + </option> + </inspection_tool> + </profile> +</component> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c46bf30c549227d08fea8edb880d63c57b7dc45a..c65c7a2ca486c40c63bad68e7737faa6ada2e968 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -11,11 +11,8 @@ </component> <component name="ChangeListManager"> <list default="true" id="f54bb93f-1ebd-4e7e-a94e-f90b5ecaf90a" name="Default Changelist" comment=""> - <change afterPath="$PROJECT_DIR$/docker-compose.yml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/app.py" beforeDir="false" /> - <change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/requirements.txt" beforeDir="false" afterPath="$PROJECT_DIR$/requirements.txt" afterDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> @@ -26,6 +23,7 @@ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> </component> <component name="ProjectId" id="249a0qEgfC8HD9PTFP9mlVwxDOa" /> + <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> <component name="ProjectViewState"> <option name="hideEmptyMiddlePackages" value="true" /> <option name="showLibraryContents" value="true" /> @@ -56,6 +54,7 @@ </entry> </map> </option> + <option name="oldMeFiltersMigrated" value="true" /> </component> <component name="WindowStateProjectService"> <state x="-1496" y="270" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1643045084941"> diff --git a/README.md b/README.md index 132fe26847ef76089fd3e4b154e3b40723913368..8fda0d2b170d4e73d4de2b0a8bdd88ce7d49d4f0 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ pip install -r requirements.txt docker-compose up # Auf dem Server einloggen und sich mit der (default) Datenbank postgres verbinden +# password: postgres psql -h localhost -U postgres -d postgres ``` @@ -48,12 +49,16 @@ python main.py "'; update users set is_admin = 'true' where username = 'mallory' ``` Ruft man nun die Funktion wieder mit dem Benutzernamen auf `python main.py "mallory"` bekommt man statt `False` nun ein `True` zurückgegeben. -Die Schwachstelle in der Abfrage besteht darin, da keine Überprüfung erfolgt, welcher `string` in die Abfrage übergeben wird. Das Semikolon innerhalb der Abfrage spielt eine Entscheide Rolle, da es SQL Abfragen terminiert. Da keine weitere Überprüfung, des Inhalts erfolgt, den wir an die Funktion übergeben, können wir nun mithilde eines `UPDATE` Befehls Werte innerhalb der Tabelle anpassen. +Die Schwachstelle in der Abfrage besteht darin, da keine Überprüfung erfolgt, welcher `string` in die Abfrage übergeben wird. Das Semikolon innerhalb der Abfrage spielt auch eine Entscheide Rolle, da es SQL Abfragen terminiert. Da keine weitere Überprüfung, des Inhalts erfolgt, den wir an die Funktion übergeben, können wir nun mithilde eines `UPDATE` Befehls Werte innerhalb der Tabelle anpassen. Die Schwachstelle im Code (`SQL Abfrage`) kann wie folgt behoben werden: ``` +# Alternative 1 """SELECT is_admin FROM users WHERE username = %(username)s """, {'username': username} + +# Alternative 2 +"""SELECT is_admin FROM users WHERE username = %s ;""", [username] ``` -Die Query wird nicht mehr mittels String Interpolation (`'%s' """ % username`) zusammengesetzt und an den Datenbankserver gesendet. Durch Abfrageparameter `%(username)s """, {'username': username}` wird nun sichergestellt, das der richtige Typ und Wert als `Parameter` an die Abfrage übergeben wird. \ No newline at end of file +Die Query wird nicht mehr mittels String Interpolation (`'%s' """ % username`) zusammengesetzt und an den Datenbankserver gesendet. Durch die Vermeidung von Single Quotes `%(username)s """, {'username': username}` wird nun sichergestellt, das der richtige Typ und Wert als `Parameter` an die Abfrage übergeben wird. \ No newline at end of file