from django.test import TestCase, Client
from LegacySite.models import Card
import io
import json
import os
# Create your tests here.
class MyTest(TestCase):
# Django's test run with an empty database. We can populate it with
# data by using a fixture. You can create the fixture by running:
# mkdir LegacySite/fixtures
# python manage.py dumpdata LegacySite > LegacySite/fixtures/testdata.json
# You can read more about fixtures here:
# https://docs.djangoproject.com/en/4.0/topics/testing/tools/#fixture-loading
fixtures = ["testdata.json"]
# Assuming that your database had at least one Card in it, this
# test should pass.
def test_get_card(self):
allcards = Card.objects.all()
self.assertNotEqual(len(allcards), 0)
def setUp(self):
self.client = Client()
def test_XSS(self):
response = self.client.get('/buy/?director=')
s= response.content.decode('utf-8')
check = s.find("")
if check >= 0:
raise Exception("XSS Vulnerability detected!")
def test_CSRF_byGETmethod(self):
self.client.login(username='test2',password='test123')
try:
response =self.client.get('/gift?username=test&amount=100')
s= response.content.decode('utf-8')
check = s.find("Card given to test")
if check >= 0:
raise Exception("XSS Vulnerability detected!")
except ValueError:
pass
def test_SQLi(self):
self.client.login(username='test2',password='test123')
card = {"merchant_id": "NYU Apparel Card",
"customer_id": "test",
"total_value": "100",
"records":
[
{"record_type": "amount_change",
"amount_added": 2000,
"signature": "12345'union all select password from LegacySite_user where username = \"admin\" -- "}]}
js = json.dumps(card)
with io.StringIO(js) as fp:
response =self.client.post('/use/',{'card_supplied': True, 'card_data':fp})
s= response.content.decode('utf-8')
check = s.find("000000000000000000000000000078d2")
if check >= 0:
raise Exception("SQLi Vulnerability detected!")
def test_CommandInjection(self):
self.client.login(username='test2',password='test123')
try:
with open("LegacySite/CommandInjection.gftcrd","rb") as fp:
response =self.client.post('/use/',{'card_supplied': True, 'card_data':fp,'card_fname':'newcard_2_parser.gftcrd;touch injected.txt;'})
except json.decoder.JSONDecodeError:
pass
if os.path.exists('injected.txt'):
raise Exception("Command Injection detected!")