104 except Exception as e:
105 print("Error: ", e)
106 try:
107 os.system("xdg-open " + os.path.join(os.getcwd(), "Resources/Images/Saved_fractals/"))108 except Exception as e:
109 print("Error: ", e)
110 checked_ez_button.create_button()
Spawning of a subprocess using a command shell is dangerous as it is vulnerable to various shell injection attacks. Great care should be taken to sanitize all input in order to mitigate this risk. Calls of this type are identified by the use of certain commands which are known to use shells.
It is possible for an attacker to craft inputs to issue different commands than the ones you intended such as removing a file.
It is recommended to use functions that don't spawn a shell. If you must use them, use shlex.quote
to sanitize the input by changing it to the shell-escaped version.
import os
# Malicious input
filename = "file.py; echo foo"
# Executing command in a shell without escaping. This will also run `echo foo`.
os.system("git add " + filename)
import os, shlex
# Malicious input
filename = "file.py; echo foo"
# This ensures someone can't inject other commands into the given command.
os.system("git add " + shlex.quote(filename))