Ich würde den eingegebenen Code in einem CharField speichern und dann eine separate Funktion erstellen, die auf das Modell zugreift, und wenn der Code keine schädlichen Methoden enthält, wird er dann in eine Datei geschrieben.
Dies sorgt für die Erstellung der Datei (da ein leeres CharField einfach in eine leere Datei ausgegeben wird) und ermöglicht die Delegation an einen Sicherheitsprüfer. Ihr Setup würde dann etwa wie folgt aussehen: Modell:
class MyModel(models.Model):
name = models.CharField(max_length=255)
code = models.CharField(MAX_FILE_LENGTH)
Ansicht:
def Submit_Code(request):
#Create MyModel using POST data
process_input_file(NEWLY_CREATED_MODEL_NAME)
return HttpResponse("Upload Successful")
def process_input_file(modelName):
#assuming unique name. Use "id=" instead if needed.
mm = MyModel.objects.get(name=modelName)
if passes_security_checks(mm.code):
f = open(mm.name, "r")
f.write(mm.code)
f.close()
bearbeiten Neue Ansicht:
def Submit_Code(request):
mm = MyModel()
mm.name = request.POST.get('name')
f = open(mm.name,"r")
f.write(request.POST.get('code')
f.close()
#then associate the newly created file with the FileField however you want
#passing through authentication/checking if need be.
return HttpResponse("Upload Successful")