Themen:
- Formulare
- Sessions
- Dateien/Verzeichnisse
- Cross Site Skripting - XSS
- Kommunikation zwischen Webbrowser/Webserver
- HTTP-Protokoll
- Cookies
DNS-Server und Webserver: Unterschiedliche Server
1.) Name des Servers
2.) ...
Anfrage des Webbrowsers
GET /index.php HTTP/1.1.
Host: localhost
Antwort:
HTTP/1.1 200 OK
Date:
Server:
X-Powerd-By:
Transfer-Encoding:
Content-Type:
201b
<body>...
Response-Code: 200 OK, Seite wurde gefunden
201b bedeutet: 8129 = 8kByte - so lang sind die Daten
1.) Request
2.) Response
- Nachrichtenkopf: Header
- Response-Code
- Nachrichtenkörper: Body
8 verschiedene Anfrage-Typen: Response-Types:
- GET
- POST (Gleich wie GET, aber eventuell andere Parameter)
- HEAD (Das gleiche, aber ohne BODY)
- PUT (Lädt Datei auf Server hoch)
- DELETE (Löscht Datei auf dem Server)
- TRACE (Der Server liefert die Antwort, wie er sie bekommen hat - wurde unterwegs manipuliert?)
- OPTIONS
- CONNECT (Verschlüsselte Verbindung über PROXY)
Response-Code
200 OK
301 Moved Permanently
400 Bad Request
404 Not found
Cookies: HTTP: Zustandsloses Protokoll
Der Wert eines Cookies kann im HTTP-Header übertragen werden
Nutzen:
- Speichern von benutzerdefinierten Einstellungen
- Sessions
- Sammeln von Surfgewohnheiten
Sitzungscookies
<?php
setcookie ("meinCookie", "Inhalt des Cookies", time()+3600);
echo "Cookie wurde gesendet.<BR />\n";
?>
<A HREF="getcookie.php">Cookie auslesen</A>
PHP-Beispiel-Codes
- setcookie.php
- getcookie.php
PHP-Functions:
- setcookie (...)
- getcookie (...)
Parameter der Funktion cookie
- Name des Cookies
- Inhalt des Cookies
- Abgelaufen
(3 Parameter)
Zugriff auf Cookie
$_COOKIES ["Name des Cookies"];
$_COOKIES [];
Globale Variablen
$_GET []: Für Addressleiste
$_POST []: Für Formulare
$_COOKIES []: Für Cookies
Stichwort: Global assoziatives Array
Formulare, was lernen?
- Formulare entwerfen
- Listen und Mehrfachauswahlen
- Benutzereingaben überprüfen
- Affenformular
- Übertragungsmöglichkeiten
- Passwortabfrage
Formulare bestehen aus zwei Komponenten
- HTML-Code
- Skript (PHP, ..)
<HTML>
<HEAD><TITLE>Formular</TITLE></HEAD>
<BODY>
<FORM ACTION="formular1.php" METHOD="GET">
Vorname: <INPUT TYPE="text" NAME="vorname" /> <BR />
Nachname: <INPUT TYPE="text" NAME="nachname" /> <BR />
<INPUT TYPE="submit" VALUE="Los gehts!" />
</FORM>
</BODY>
</HTML>
Formulare werden mit dem FORM-Tag definiert.
- FORM-Tag
- Attribut ACTION
- Parameter POST (Welcher HTTP-Request kommt zum Einsatz)
Eingabefelder:
- Textfelder TYPE="text"
- Passwordfelder TYPE="password"
- Checkboxen TYPE="checkbox"
- Schaltflächen TYPE="submit", verbunden mit ACTION
NAME: Eindeutiger Name
Entweder POST oder GET
$_POST ["name1"];
$_GET ["name2"];
Listen in Formularen
SELECT-Tag
<HTML>
<HEAD><TITLE>Einfache Liste</TITLE></HEAD>
<BODY>
<FORM ACTION="list.php" METHOD="GET">
<SELECT NAME="auswahl">
<OPTION>Apfel</OPTION>
<OPTION>Birne</OPTION>
<OPTION>Banane</OPTION>
<OPTION>Grapefruit</OPTION>
</SELECT>
<INPUT TYPE="submit" VALUE="Abschicken">
<FORM>
</BODY>
</HTML>
echo $_GET ['auswahl'];
Mehrfachauswahlen - SELECT-Tag, MULTIPLE Attribut
<?php
$wahl = $_GET['auswahl'];
for ($i=0; $i < sizeof($wahl); $i++) {
$wert = current($wahl);
echo $wert ."<BR />\n";
next($wahl);
}
?>
isset ()
Affenformular
Passwörter:
FORM INPUT TYPE="password"
Dann mit MD5 speichern
md5 ("password");
Sessions:
1.) session_start ();
2.) Session-ID
3.) $_SESSION []
Session-ID's ohne Cookies seit PHP 5.3 nicht mehr unterstützt
session_destroy ();
DBMS
Relationale Datenbank, Relation, Tupel
Datentypen:
- Ganzzahlen
- Fließkommazahlen
- Zeichenketten
- binäre Datentypen
BIT
TINYINT
BOOL BOOLEAN
SMALLINT
MEDIUMINT
INT INTEGER
BIGINT
Fließkommazahlen
FLOAT
DOUBLE
DECIMAL
CHAR
VARCHAR (M)
TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BINARY
VARBINARY
TINYBLOB BLOB MEDIUMBLOB LONGBLOB
DATE
TIME
DATETIME
TIMESTAMP
CREATE TABLE
mysql -u root -p -v < xyz.sql
DROP DATABASE 'xyz'
CREATE DATABASE 'xyz'
DROP TABLE 'abc'
CREATE TABLE 'abc' ('name1' VARCHAR (64), 'name2' VARCHAR (64))
INSERT INTO 'abc' VALUES ("Hallo", "Welt");
SHOW TABLES IN 'xyz'
USE 'xyz'
SELECT * FROM 'abc'
SELECT * FROM 'abc' WHERE expression
INSERT INTO 'abc' ('name1', 'name2') VALUES ("Hallo", "Welt");
DELETE FROM 'abc' WHERE expression
SELECT * FROM 'abc' JOIN 'def'
USING
SHOW DATABASES;
SET PASSWORD;
mysql_connect ();
mysql_close ();
mysql_query ();
mysql_error ();
mysql_real_escape_string ();
mysql_select_db ();
mysql_fetch_row ();
mysql_fetch_assoc ();
mysql_num_rows ();
mysql_num_fields ();
mysql_result ();
$handle = mysql_connect ('127.0.0.1', user, password);
if ($handle) ...
else ...
$query = "SELECT * FROM 'abc';
$result = mysql_quere ($query);
$row = mysql_fetch_assoc ($result);
In C
int factorial(int x) {
if (x <= 1)
return 1;
return x * factorial(x - 1);
}
In Python
def factorial(x):
if x <= 1:
return 1
return x * factorial(x - 1)
Hallo Welt:
print "Hallo Welt!"
Perl:
if (<Bedingung>) {<Anweisungen>}
[elsif (<Bedingung>) {<Anweisungen>}]
[else {<Anweisungen>}]
Ruby
# Definiere „Funktion“
def meine_funktion
puts "Hier bin ich"
end
# Kann in andern Objekten wie eine Funktion benutzt werden
class ABC
def gib_meine_funktion_aus
meine_funktion
end
end
mein_abc = ABC.new
mein_abc.gib_meine_funktion_aus # => Hier bin ich
mein_abc.meine_funktion # => Fehlermeldung, private method `meine_funktion' called
SDL:
#include <SDL2/SDL.h>
Definitionen:
SDL_Event event;
SDL_Window* window = NULL;
SDL_Surface* surface = NULL;
atexit (SDL_QUIT)
Aufrufe
SDL_Init (SDL_INIT_VIDEO);
window = SDL_CreateWindow ();
surface = SDL_GetWindowSurface (window);
SDL_PollEvent (&event)
SDL_DestroyWindow (window);
SDL_Init ();
SDL_CreateWindow ();
SDL_GetWindowSurface ();
SDL_PollEvent ()
SDL_DestroyWindow ();
SDL_Rect src, dst;
src.x;
sry.y;
src.w;
src.h;
dst.x;
dst.y;
dst.w;
dst.h;
image->w;
image->h;
SDL_FillRect ();
SDL_SetColorKey ();
SDL_KeyState ();
SDL_FillRect ();
SDL_BlitSurface ();
SDL_Flip ();
SDL_FreeSurface ();
SDL_LoadBMP ();
image = SDL_LoadBMP ("tux.bmp");
MySQL nach Excel exportieren:
header('Content-Type: application/xls');
header('Content-Disposition: attachment; filename=info.xls');
$connect = mysqli_connect("hostname", "username", "password", "db_name");
if(isset($_POST["submit"]))
{
$query = "SELECT * FROM users";
$res = mysqli_query($connect, $query);
if(mysqli_num_rows($res) > 0)
{
$export .= '
<table>
<tr>
<th> id </th>
<th>firstname</th>
<th>lastname</th>
<th>dob</th>
</tr>
';
while($row = mysqli_fetch_array($res))
{
$export .= '
<tr>
<td>'.$row["id"].'</td>
<td>'.$row["firstname"].'</td>
<td>'.$row["lastname"].'</td>
<td>'.$row["dob"].'</td>
</tr>
';
}
$export .= '</table>';
header('Content-Type: application/xls');
header('Content-Disposition: attachment; filename=info.xls');
echo $export;
}
}
Einfache Filterung
SELECT * FROM kunden WHERE name = 'a coding project'
Filterung mit Suchefunktion
SELECT * FROM kunden WHERE name LIKE '%coding%'
Filterung zwischen zwei Werten
SELECT * FROM kunden WHERE id BETWEEN 1 AND 5
Filterung mit Subselect
SELECT * FROM kunden WHERE name IN (SELECT name FROM names)
Einfache Sortierung
SELECT * FROM kunden ORDER BY name,id DESC
Spalte hinzufügen
ALTER TABLE kunden ADD column strasse VARCHAR(255);
Benutzer erstellen
GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY 'passwort';
The INNER JOIN keyword selects records that have matching values in both tables.
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
SELECT
SUM(b.anzahl),
p.produkt
FROM
bestellung b,
produkt p
WHERE
b.pr_id = p.id
GROUP BY
p.produkt
SELECT
SUM(b.anzahl),
p.produkt
FROM
bestellung b
INNER JOIN
produkt p ON (b.pr_id = p.id)
GROUP BY
p.produkt
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
JOIN
INNER JOIN
LEFT JOIN
RIGHT JOIN
Doppelte Einträge verhindern
DISTINCT-Anweisung
SELECT DISTINCT vorname FROM users ORDER BY vorname
SELECT DISTINCT vorname, nachname FROM users ORDER BY vorname, nachname
EXCEL
=SUMME (A3;B5)
=SUMME (A2:A14)
Anzahl:
=ANZAHL(E1:F4)
Höchst und Tiefswerte Ermitteln:
MIN ()
MAX ()
Durschnitt:
MITTELWERT ()
Logische Prüfung
=WENN (BEDINGUNG; DANN; SONST)
=WENN (C9="Montag";"Okay";"anderer Tag")
=WENN(A1=“blau“;
=WENN(A5>100;A5-(A5*2%);A5)
=SUMMENPRODUKT
=HÄUFIGKEIT
<?php
$pdo = new PDO('mysql:host=localhost;dbname=databasename', 'username', 'password');
$sql = "SELECT * FROM users";
foreach ($pdo->query($sql) as $row) {
echo $row['email']."<br />";
echo $row['vorname']."<br />";
echo $row['nachname']."<br /><br />";
}
?>
$stmt = $db->query ("SELECT * FROM codes");
$result = $stmt->fetchAll (PDO::FETCH_BOTH);
Eine "Certification Authority" (CA / Zertifizierungsstelle) ist eine Instanz, die digitale Zertifikate ausstellt und beglaubigt.
Paket ca-certificates
selbstsignierten Zertifikate
CAs sind wesentlicher Bestandteil einer PKI (Public-Key-Infrastruktur)
- CA
- PKI
- TLS-verschlüsselte Verbindung zum Server
Signatur ins Server-Zertifikat
privater Schlüssel in RSA-Format erstellen
übliche Dateiendung: key
Außerdem: Zertifizierungsantrag, csr. Certificate Signing Request
Ein Certificate Signing Request (CSR; deutsch Zertifikatsignierungsanforderung) oder Certification Reques ist ein digitaler Antrag, mittels einer digitalen Signatur aus einem öffentlichen Schlüssel ein digitales Zertifikat zu erstellen.
Zwei Dateien:
1.) beispiel.key
2.) beispiel.csr
Der Zertifizierungsantrag wird zum Signieren an eine CA übertragen
Man hat einen CSR - einen Certificate Signing Request - das ist ein Antrag - eine Datei - aber die ist ein Antrag - und den schickt man einer CA - und: Die signiert das - also beglaubigt das. Die CA kann man selber betreiben - das ist nicht offiziell. Dann heißt CA nicht einfach, nicht das Büro in dem man sitzt - sondern ist die ganze Software-Sammlung.
Jetzt schickt man den CSR an eine CA.
PKI-Datei: Man nennt alle Dateien gesammelt - PKI-Datei
Die CA verfügt über zwei Dateien:
- ca.key
- ca.crt
Also, sagen wir so
1.) Es gibt eine CA
2.) Es gibt den Websitebetreiber
1.) Es gibt einen Schlüssel
2.) Es gibt eine Zertifikat
Schlüssel: Key
Zertifikat: CRT
In dem CRT ist der Key. Aber man hat zwei Dateien
Der Websitenbetreiber, hat
1.) Ein Zertifkat
2.) Ein Key
Die CA hat ein
1.) Zertifikat
2.) Einen Key
Damit gibt es:
1.) CA
1.1.) Key
1.2.) CRT
2.) Homepage
2.1.) Key
2.2.) CRT
Die CA kann man selber sein. Dann ist das Zertifikat selbst signiert.
Jetzt hat man noch den Zertifkatsantrag
1.) Key
2.) CRT
3.) CSR
CSR = Zertifkatsantrag
Also, man hat statisch
1.) CA
1.1.) Key
1.2.) CRT
2.) Homepage
2.1.) Key
2.2.) CRT
Jetzt das ist statisch, wenn es fertig ist. Damit die CA aber ein CRT für die Homepage erstellen kann, braucht die CA einen Antrag. Also, wenn die CA hundert Mal einen Key und einen CRT hat, dann hat der Nutzer davon nichts, wenn er keinen Antrag stellt.
Also: Antrag: CSR
1.) CA
1.1.) Key
1.2.) CRT
2.) Homepage
2.1.) Key
2.2.) CRT
2.3.) CSR
beispiel.key
beispiel.crt
beispiel.csr
CSR kann natürlich verschwinden - wenn der Antrag gestellt wurde und: Das Zertifkat da ist, kann der Antrag weg.
Dem Benutzer reicht aber das CRT der Homepage nicht. Er braucht auch das CRT des CA
ca.crt
homepage.crt
Also, er kriegt das homepage.crt und überprüft die Richtig mit dem CRT des CA.
Speicherformate:
CA-Zertifikate - also, von der CA - einem Dienst, unterscheiden sich nicht von Client und Serverzertifikaten
1.) CA-Zertifikat
2.) Client-Zertifikat
3.) Server-Zertifikat
Linux, zwei verschiedene Dateiformate:
1.) PEM-Format, Base64-kodiert
2.) DER-Format, binär kodiert (ASN.1-Format)
PEM-Format: Also, in der Datei:
BEGIN CERTIFICATE"/"END CERTIFICATE
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
In diesem Format sind sie lesbar und enthalten, Strings wie
MIIG9TCCBd2gAwIBAgISA101uy+kA82E9A89jwHfDLh1MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0I
Bemerkung: Intermediate Certificates
CA-Zertifikate hinterlegen: (Abspeichern)
- Dateien in einem Verzeichnis - alle im PEM-Format und müssen Dateiendung *.pem haben
- Einzelne Dateien mit allen CA's - in einer PEM
- NSS-Datenbank
- ...
- Hardware-Tokens, können in Hardware gespeichert werden
OpenSSL
GnuTLS
NSS
/etc/ssl/certs
Paket: Programm: ca-certificates, allgemein, anerkannte öffentliche CA-Zertifikate
Aufbau eine CA-Certificates:
1.) Subject: Beschreibung wofür
2.) Issuer: Ausstellende Instanz
Selbstsignierte Zertifikate sind keine, die über eine CA signiert wurden
1.) beispiel.key
2.) beispiel.csr
3.) Signieren
4:)
Es gibt die Möglichkeit, dass sie
CRT, CSR, KEY heißen.
CRT: Zertifikat
CSR: Antrag
KEY: Schlüssel
Oder sie heißen alle PEM, weil sie im PEM Format sind.
Dann heißen die entsprechend
req.pem
cert.pem
key.pem
Certificate Authority (CA) erstellen
openssl genrsa -aes256 -out ca-key.pem 2048
Root-Zertifikat
openssl req -x509 -new -nodes -extensions v3_ca -key ca-key.pem -days 1024 -out ca-root.pem -sha512
Root-Zertifikat auf den Clients importieren
sudo cp ca-root.pem /usr/share/ca-certificates/myca-root.crt
sudo dpkg-reconfigure ca-certificates
Ein neues Zertifikat ausstellen
openssl genrsa -out zertifikat-key.pem 4096
openssl req -new -key zertifikat-key.pem -out zertifikat.csr -sha512
openssl x509 -req -in zertifikat.csr -CA ca-root.pem -CAkey ca-key.pem -CAcreateserial -out zertifikat-pub.pem -days 365 -sha512
zertifikat-key.pem, zertifikat-pub.pem, ca-root.pem
POST /test.php HTTP/1.1
Host: localhost
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
q=Hallo
openssl s_client -connect www.facebook.com:443
Set-Cookie: PHPSESSID=ssi4fhgg2e6bnbmg0c7rf65jo1; path=/
Set-Cookie: Cookie23=Inhalt; expires=Sat, 16-Apr-2022 19:45:26 GMT; Max-Age=3600
openssl s_client -crlf -connect www.ituenix.de:443
.*2014-12-18_Fortuna,_Johannes_Benk_at_Neue_Burg,_Vienna_-hu-_6224.jpg
.*2014-12-18_Fortuna,_Johannes_Benk_at_Neue_Burg,_Vienna_-hu-_6224.jpg
.*20220504_121603_600x800.jpg
.*20220504_121603_600x800.jpg
.*20220504_121611_600x800.jpg
.*20220504_121611_600x800.jpg
.*20220504_121722_800x600.jpg
.*20220504_121722_800x600.jpg
.*20220504_121725_800x600.jpg
.*20220504_121725_800x600.jpg
.*20220504_121727_800x600.jpg
.*20220504_121727_800x600.jpg
.*20220504_210134_800x600_640x480.jpg
.*20220504_210134_800x600_640x480.jpg
.*20220504_210134_800x600.jpg
.*20220504_210134_800x600.jpg
.*704x396.jpeg
.*704x396.jpeg
.*freuddurchgestrichen.jpg
.*freuddurchgestrichen.jpg
.*img/Screenshot_20220508_101728.png
.*img/Screenshot_20220508_101728.png
.*img/Screenshot_20220508_101910.png
.*img/Screenshot_20220508_101910.png
.*img/Screenshot_20220508_110500.png
.*img/Screenshot_20220508_110500.png
.*img/Screenshot_20220510_122914.png
.*img/Screenshot_20220510_122914.png
.*img/Screenshot_20220510_204633.png
.*img/Screenshot_20220510_204633.png
.*img/Screenshot_20220511_100926.png
.*img/Screenshot_20220511_100926.png
.*img/Screenshot_20220511_125411.png
.*img/Screenshot_20220511_125411.png
.*img/Screenshot_20220511_182704.png
.*img/Screenshot_20220511_182704.png
.*img/Screenshot_20220511_184159.png
.*img/Screenshot_20220511_184159.png
.*inlondonwirdfreudbegeistertaufgenommen100 _v-gseapremiumxl.jpg
.*inlondonwirdfreudbegeistertaufgenommen100 _v-gseapremiumxl.jpg
.*justizdurchgestrichen.jpg
.*justizdurchgestrichen.jpg
.*justiz-t9417.jpg
.*justiz-t9417.jpg
.*slotj/slot-game-master/examples/Screenshot_20200915-112100.jpg
.*slotj/slot-game-master/examples/Screenshot_20200915-112100.jpg
.*slotj/slot-game-master/examples/Screenshot_20200915-112108.jpg
.*slotj/slot-game-master/examples/Screenshot_20200915-112108.jpg
.*slotj/slot-game-master/examples/Screenshot_20200915-112117.jpg
.*slotj/slot-game-master/examples/Screenshot_20200915-112117.jpg
.*slotj/slot-game-master/examples/Screenshot_2021-07-27-233210.jpg
.*slotj/slot-game-master/examples/Screenshot_2021-07-27-233210.jpg
.*slotj/slot-game-master/src/assets/atlas.png
.*slotj/slot-game-master/src/assets/atlas.png
.*slotj/slot-game-master/src/public/android-chrome-192x192.png
.*slotj/slot-game-master/src/public/android-chrome-192x192.png
.*slotj/slot-game-master/src/public/android-chrome-512x512.png
.*slotj/slot-game-master/src/public/android-chrome-512x512.png
.*slotj/slot-game-master/src/public/apple-touch-icon.png
.*slotj/slot-game-master/src/public/apple-touch-icon.png
.*slotj/slot-game-master/src/public/favicon-16x16.png
.*slotj/slot-game-master/src/public/favicon-16x16.png
.*slotj/slot-game-master/src/public/favicon-32x32.png
.*slotj/slot-game-master/src/public/favicon-32x32.png
.*slotj/slot-game-master/src/public/mstile-150x150.png
.*slotj/slot-game-master/src/public/mstile-150x150.png
.*slotj/slotjs-master/static/github/github-s-e-16.png
.*slotj/slotjs-master/static/github/github-s-e-16.png
.*slotj/slotjs-master/static/gmzcodes/gmzcodes-t-e-32.png
.*slotj/slotjs-master/static/gmzcodes/gmzcodes-t-e-32.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-128.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-128.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-16.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-16.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-256.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-256.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-32.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-32.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-48.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-48.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-512.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-512.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-64.png
.*slotj/slotjs-master/static/logo/slotjs-t-e-64.png
.*slotj/slotjs-master/static/screenshots/slotjs-old.png
.*slotj/slotjs-master/static/screenshots/slotjs-old.png
.*slotj/slotjs-master/static/screenshots/slotjs.png
.*slotj/slotjs-master/static/screenshots/slotjs.png
.*slotm/slot-game-master/examples/Screenshot_20200915-112100.jpg
.*slotm/slot-game-master/examples/Screenshot_20200915-112100.jpg
.*slotm/slot-game-master/examples/Screenshot_20200915-112108.jpg
.*slotm/slot-game-master/examples/Screenshot_20200915-112108.jpg
.*slotm/slot-game-master/examples/Screenshot_20200915-112117.jpg
.*slotm/slot-game-master/examples/Screenshot_20200915-112117.jpg
.*slotm/slot-game-master/examples/Screenshot_2021-07-27-233210.jpg
.*slotm/slot-game-master/examples/Screenshot_2021-07-27-233210.jpg
.*slotm/slot-game-master/src/assets/atlas.png
.*slotm/slot-game-master/src/assets/atlas.png
.*slotm/slot-game-master/src/public/android-chrome-192x192.png
.*slotm/slot-game-master/src/public/android-chrome-192x192.png
.*slotm/slot-game-master/src/public/android-chrome-512x512.png
.*slotm/slot-game-master/src/public/android-chrome-512x512.png
.*slotm/slot-game-master/src/public/apple-touch-icon.png
.*slotm/slot-game-master/src/public/apple-touch-icon.png
.*slotm/slot-game-master/src/public/favicon-16x16.png
.*slotm/slot-game-master/src/public/favicon-16x16.png
.*slotm/slot-game-master/src/public/favicon-32x32.png
.*slotm/slot-game-master/src/public/favicon-32x32.png
.*slotm/slot-game-master/src/public/mstile-150x150.png
.*slotm/slot-game-master/src/public/mstile-150x150.png
.*Slotmachine-master/SlotMachine-master/images/apple.png
.*Slotmachine-master/SlotMachine-master/images/apple.png
.*Slotmachine-master/SlotMachine-master/images/cherry.png
.*Slotmachine-master/SlotMachine-master/images/cherry.png
.*Slotmachine-master/SlotMachine-master/images/grapes.png
.*Slotmachine-master/SlotMachine-master/images/grapes.png
.*Slotmachine-master/SlotMachine-master/images/lemon.png
.*Slotmachine-master/SlotMachine-master/images/lemon.png
.*Slotmachine-master/SlotMachine-master/images/orange.png
.*Slotmachine-master/SlotMachine-master/images/orange.png
.*Slotmachine-master/SlotMachine-master/images/pear.png
.*Slotmachine-master/SlotMachine-master/images/pear.png
.*Slotmachine-master/SlotMachine-master/images/watermelon.png
.*Slotmachine-master/SlotMachine-master/images/watermelon.png
.*Slotmachine-master/SlotMachine-master/index.php
.*Slotmachine-master/SlotMachine-master/index.php
.*text/poker2.txt
.*text/poker2.txt
.*text/poker.txt
.*text/poker.txt