Skip to content
Snippets Groups Projects
Commit 85064357 authored by Yannic Nevado Hidalgo's avatar Yannic Nevado Hidalgo
Browse files

add: second alternative

parent ff7e92dc
Branches main
No related tags found
No related merge requests found
<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
<?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
...@@ -11,11 +11,8 @@ ...@@ -11,11 +11,8 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="f54bb93f-1ebd-4e7e-a94e-f90b5ecaf90a" name="Default Changelist" comment=""> <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$/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> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -26,6 +23,7 @@ ...@@ -26,6 +23,7 @@
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component> </component>
<component name="ProjectId" id="249a0qEgfC8HD9PTFP9mlVwxDOa" /> <component name="ProjectId" id="249a0qEgfC8HD9PTFP9mlVwxDOa" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState"> <component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
...@@ -56,6 +54,7 @@ ...@@ -56,6 +54,7 @@
</entry> </entry>
</map> </map>
</option> </option>
<option name="oldMeFiltersMigrated" value="true" />
</component> </component>
<component name="WindowStateProjectService"> <component name="WindowStateProjectService">
<state x="-1496" y="270" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1643045084941"> <state x="-1496" y="270" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1643045084941">
......
...@@ -13,6 +13,7 @@ pip install -r requirements.txt ...@@ -13,6 +13,7 @@ pip install -r requirements.txt
docker-compose up docker-compose up
# Auf dem Server einloggen und sich mit der (default) Datenbank postgres verbinden # Auf dem Server einloggen und sich mit der (default) Datenbank postgres verbinden
# password: postgres
psql -h localhost -U postgres -d postgres psql -h localhost -U postgres -d postgres
``` ```
...@@ -48,12 +49,16 @@ python main.py "'; update users set is_admin = 'true' where username = 'mallory' ...@@ -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. 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: Die Schwachstelle im Code (`SQL Abfrage`) kann wie folgt behoben werden:
``` ```
# Alternative 1
"""SELECT is_admin FROM users WHERE username = %(username)s """, {'username': username} """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. 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 \ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment