Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
transfer.sh — Einfaches und schnelles Dateiteilen von der Kommandozeile. | Kitploit
Tools/GitHubGitHub/dutchcoders/transfer.sh
Allgemeine DienstprogrammeVerschlüsselungs-/EntschlüsselungstoolsDatenexfiltration
GitHubdutchcoders/transfer.sh

transfer.sh

Einfaches und schnelles Dateiteilen von der Kommandozeile.

Repository anzeigen
15.9k1.6kvor 2 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

SICHERHEITSWARNUNG

IP-Filter und HTTP-Authentifizierungsumgehung durch nicht authentifiziertes X-Forwarded-For-Header-Spoofing

transfer.sh Go Report Card Docker pulls Build Status

Einfaches und schnelles Dateiteilen von der Kommandozeile. Dieser Code enthält den Server mit allem, was Sie benötigen, um Ihre eigene Instanz zu erstellen.

Transfer.sh unterstützt derzeit die Anbieter s3 (Amazon S3), gdrive (Google Drive), storj (Storj) und das lokale Dateisystem (local).




Haftungsausschluss

@stefanbenten ist ein Betreuer dieses Repositorys und die Person, die eine bekannte öffentliche Installation der Software im Repo hostet.

Die beiden sind dennoch unabhängig voneinander, und das Repo ist nicht der Ort, um Anfragen und Probleme für eine der öffentlichen Installationen zu richten.

Aus Sicherheitsgründen werden keine öffentlichen Installationen von Drittanbietern der Software im Repo selbst beworben oder erwähnt.

Die offizielle Position von mir, @aspacca, als Betreuer des Repos, ist, dass Sie, wenn Sie die Software nutzen möchten, Ihre eigene Installation hosten sollten.




Verwendung

In diesem Abschnitt wird beschrieben, wie Sie transfer.sh verwenden.


Hochladen```bash

$ curl -v --upload-file ./hello.txt https://transfer.sh/hello.txt

root@kitploit:~
### Verschlüsseln & Hochladen```bash
$ gpg --armor --symmetric --output - /tmp/hello.txt | curl --upload-file - https://transfer.sh/test.txt

Download & Entschlüsseln```bash

$ curl https://transfer.sh/1lDau/test.txt | gpg --decrypt --output /tmp/hello.txt

root@kitploit:~
### Hochladen zu Virustotal```bash
$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal

Löschen```bash

$ curl -X DELETE

root@kitploit:~
<br />

---

<br />

## Anforderungs-Header

Dieser Abschnitt erklärt, wie Sie mit curl Anforderungs-Header verarbeiten können:

<br />

### Max-Downloads```bash
$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H "Max-Downloads: 1" # Limit the number of downloads

Max-Days```bash

$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H "Max-Days: 1" # Set the number of days before deletion

root@kitploit:~
<br />

### X-Encrypt-Password

#### Vorsicht, verwenden Sie diese Funktion nur auf Ihrem selbst gehosteten Server: Die Nutzung eines Drittanbieterdienstes für serverseitige Verschlüsselung erfolgt auf eigenes Risiko```bash
$ curl --upload-file ./hello.txt https://your-transfersh-instance.tld/hello.txt -H "X-Encrypt-Password: test" # Encrypt the content server side with AES256 using "test" as password

X-Decrypt-Password

Vorsicht, verwenden Sie diese Funktion nur auf Ihrem selbst gehosteten Server: Wenn Sie einem Drittanbieterdienst für serverseitige Verschlüsselung vertrauen, geschieht dies auf eigenes Risiko.```bash

$ curl https://your-transfersh-instance.tld/BAYh0/hello.txt -H "X-Decrypt-Password: test" # Decrypt the content server side with AES256 using "test" as password

root@kitploit:~
<br />

---

<br />

## Antwort-Header

In diesem Abschnitt wird erläutert, wie Antwort-Header behandelt werden:

<br />

### X-Url-Delete

Die URL, die zum Anfordern des Löschens einer Datei verwendet wird und als Antwort-Header zurückgegeben wird:```bash
curl -sD - --upload-file ./hello.txt https://transfer.sh/hello.txt | grep -i -E 'transfer\.sh|x-url-delete'
x-url-delete: https://transfer.sh/hello.txt/BAYh0/hello.txt/PDw0NHPcqU
https://transfer.sh/hello.txt/BAYh0/hello.txt



Beispiele

Siehe gute Anwendungsbeispiele in examples.md


Link-Aliase

Erstelle direkten Download-Link:

https://transfer.sh/1lDau/test.txt --> https://transfer.sh/get/1lDau/test.txt

Inline-Datei:

https://transfer.sh/1lDau/test.txt --> https://transfer.sh/inline/1lDau/test.txt




Verwendung

Wenn Sie TLS mit Let's-Encrypt-Zertifikaten verwenden möchten, setzen Sie lets-encrypt-hosts auf Ihre Domain, setzen Sie tls-listener auf :443 und aktivieren Sie force-https.

Wenn Sie TLS mit eigenen Zertifikaten verwenden möchten, setzen Sie tls-listener auf :443, force-https, tls-cert-file und tls-private-key.




Entwicklung

Umgestellt auf GO111MODULE```bash go run main.go --provider=local --listener :8080 --temp-path=/tmp/ --basedir=/tmp/

root@kitploit:~
<br />

---

<br />

## Erstellen```bash
$ git clone [email protected]:dutchcoders/transfer.sh.git
$ cd transfer.sh
$ go build -o transfersh main.go



Docker

Für eine einfache Bereitstellung haben wir einen offiziellen Docker-Container erstellt. Es gibt zwei Varianten, die sich nur darin unterscheiden, welcher Benutzer den Prozess ausführt.

Die Standardvariante läuft als root:

[!WARNING] Es wird davon abgeraten, den latest-Tag für WatchTower oder ähnliche Werkzeuge zu verwenden. Der latest-Tag kann auf unveröffentlichte Entwickler-, Test-Builds und Patch-Releases für ältere Versionen verweisen. Verwenden Sie einen tatsächlichen Versionstag, bis transfer.sh Major- oder Minor-Versionstags unterstützt.```bash docker run --publish 8080:8080 dutchcoders/transfer.sh:latest --provider local --basedir /tmp/

root@kitploit:~
<br />

### Kein Root

Die mit `-noroot` gekennzeichneten Image-Builds laufen mit geringsten Privilegien, um die Angriffsfläche zu reduzieren, falls eine Anwendung kompromittiert wird.

> [!NOTE]
> Die Verwendung von `-noroot` wird **empfohlen**

<br />

Der mit dem Suffix `-noroot` getaggte verwendet `5000` sowohl als UID als auch GID:```bash
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest-noroot --provider local --basedir /tmp/

[!NOTE] Details zur Entwicklungsgeschichte unter:

  • https://github.com/dutchcoders/transfer.sh/pull/418

Tags


Erstellen des Containers

Sie können den Container auch selbst erstellen. So können Sie wählen, welche UID/GID verwendet wird, z. B. bei Verwendung von NFS-Mounts:```bash

Build arguments:

* RUNAS: If empty, the container will run as root.

Set this to anything to enable UID/GID selection.

* PUID: UID of the process. Needs RUNAS != "". Defaults to 5000.

* PGID: GID of the process. Needs RUNAS != "". Defaults to 5000.

docker build -t transfer.sh-noroot --build-arg RUNAS=doesntmatter --build-arg PUID=1337 --build-arg PGID=1338 .

root@kitploit:~
<br />

---

<br />

## S3 Verwendung

Für die Verwendung mit einem AWS S3 Bucket müssen Sie lediglich die folgenden Optionen angeben:
- provider `--provider s3`
- aws-access-key _(entweder über Flag oder Umgebungsvariable `AWS_ACCESS_KEY`)_
- aws-secret-key _(entweder über Flag oder Umgebungsvariable `AWS_SECRET_KEY`)_
- bucket _(entweder über Flag oder Umgebungsvariable `BUCKET`)_
- s3-region _(entweder über Flag oder Umgebungsvariable `S3_REGION`)_

Wenn Sie die s3-region angeben, müssen Sie die Endpunkt-URL nicht festlegen, da der korrekte Endpunkt automatisch verwendet wird.

<br />

### Benutzerdefinierte S3-Anbieter

Um einen benutzerdefinierten Nicht-AWS S3-Anbieter zu verwenden, müssen Sie den von Ihrem Cloud-Anbieter definierten Endpunkt angeben.

<br />

---

<br />

## Storj Netzwerkanbieter

Um das Storj-Netzwerk als Speicheranbieter zu verwenden, müssen Sie die folgenden Flags angeben:
- provider `--provider storj`
- storj-access _(entweder über Flag oder Umgebungsvariable STORJ_ACCESS)_
- storj-bucket _(entweder über Flag oder Umgebungsvariable STORJ_BUCKET)_

<br />

### Bucket und Bereich erstellen

Sie müssen im Voraus einen Zugriffsgrant (oder aus der Uplink-Konfiguration kopieren) und einen Bucket erstellen.

Um zu beginnen, melden Sie sich bei Ihrem Konto an, gehen Sie zum Menü für Zugriffsgrants und starten Sie den Assistenten oben rechts.

Geben Sie Ihren gewünschten Zugriffsgrant-Namen ein, klicken Sie auf *Weiter* und schränken Sie ihn nach Bedarf/Präferenz ein.
Fahren Sie danach entweder in der CLI oder im Browser fort. Als Nächstes werden Sie nach einer Passphrase gefragt, die als Verschlüsselungsschlüssel dient.
**Stellen Sie sicher, dass Sie sie an einem sicheren Ort aufbewahren. Ohne sie verlieren Sie die Fähigkeit, Ihre Dateien zu entschlüsseln!**

Danach können Sie den Zugriffsgrant kopieren und dann den Start des transfer.sh-Endpunkts beginnen.
Es wird empfohlen, sowohl den Zugriffsgrant als auch den Bucket-Namen als Umgebungsvariablen für erhöhte Sicherheit anzugeben.

Beispiel:```
export STORJ_BUCKET=<BUCKET NAME>
export STORJ_ACCESS=<ACCESS GRANT>
transfer.sh --provider storj



Nutzung von Google Drive

Für die Nutzung mit Google Drive müssen Sie die folgenden Optionen angeben:

  • provider
  • gdrive-client-json-filepath
  • gdrive-local-config-path
  • basedir

Erstellen der Gdrive Client Json

Sie müssen eine OAuth Client id von console.cloud.google.com erstellen, die Datei herunterladen und in einem sicheren Verzeichnis ablegen.


Nutzungsbeispielgo run main.go --provider gdrive --basedir /tmp/ --gdrive-client-json-filepath /[credential_dir] --gdrive-local-config-path [directory_to_save_config]




Shell functions

Bash, ash and zsh (multiple files uploaded as zip archive)

Add this to .bashrc or .zshrc or its equivalent
root@kitploit:~
transfer() (if [ $# -eq 0 ]; then printf "Keine Argumente angegeben.\nVerwendung:\n transfer <datei|verzeichnis>\n ... | transfer <dateiname>\n">&2; return 1; fi; file_name=$(basename "$1"); if [ -t 0 ]; then file="$1"; if [ ! -e "$file" ]; then echo "$file: Datei oder Verzeichnis nicht gefunden">&2; return 1; fi; if [ -d "$file" ]; then cd "$file" || return 1; file_name="$file_name.zip"; set -- zip -r -q - .; else set -- cat "$file"; fi; else set -- cat; fi; url=$("$@" | curl --silent --show-error --progress-bar --upload-file "-" "https://transfer.sh/$file_name"); echo "$url"; )```

<br />

#### Now you can use transfer function

$ transfer hello.txt```


Bash and zsh (with delete url, delete token output and prompt before uploading)

Add this to .bashrc or .zshrc or its equivalent
Expand

root@kitploit:~

transfer() { local file declare -a file_array file_array=("${@}")

root@kitploit:~
if [[ "${file_array[@]}" == "" || "${1}" == "--help" || "${1}" == "-h" ]]
then
    echo "${0} - Beliebige Dateien hochladen zu \"transfer.sh\"."
    echo ""
    echo "Verwendung: ${0} [Optionen] [<Datei>]..."
    echo ""
    echo "OPTIONEN:"
    echo "  -h, --help"
    echo "      diese Nachricht anzeigen"
    echo ""
    echo "BEISPIELE:"
    echo "  Eine einzelne Datei aus dem aktuellen Arbeitsverzeichnis hochladen:"
    echo "      ${0} \"image.img\""
    echo ""
    echo "  Mehrere Dateien aus dem aktuellen Arbeitsverzeichnis hochladen:"
    echo "      ${0} \"image.img\" \"image2.img\""
    echo ""
    echo "  Eine Datei aus einem anderen Verzeichnis hochladen:"
    echo "      ${0} \"/tmp/some_file\""
    echo ""
    echo "  Alle Dateien aus dem aktuellen Arbeitsverzeichnis hochladen. Beachten Sie die Ratenbegrenzung des Webservers!:"
    echo "      ${0} *"
    echo ""
    echo "  Eine einzelne Datei aus dem aktuellen Arbeitsverzeichnis hochladen und das Lösch-Token sowie den Download-Link herausfiltern:"
    echo "      ${0} \"image.img\" | awk --field-separator=\": \" '/Delete token:/ { print \$2 } /Download link:/ { print \$2 }'"
    echo ""
    echo "  Hilfetext von \"transfer.sh\" anzeigen:"
    echo "      curl --request GET \"https://transfer.sh\""
    return 0
else
    for file in "${file_array[@]}"
    do
        if [[ ! -f "${file}" ]]
        then
            echo -e "\e[01;31m'${file}' konnte nicht gefunden werden oder ist keine Datei.\e[0m" >&2
            return 1
        fi
    done
    unset file
fi

local upload_files
local curl_output
local awk_output

du -c -k -L "${file_array[@]}" >&2
# kompatibel mit "bash"
if [[ "${ZSH_NAME}" == "zsh" ]]
then
    read $'upload_files?\e[01;31mMöchten Sie die obigen Dateien ('"${#file_array[@]}"$') wirklich auf "transfer.sh" hochladen? (Y/n): \e[0m'
elif [[ "${BASH}" == *"bash"* ]]
then
    read -p $'\e[01;31mMöchten Sie die obigen Dateien ('"${#file_array[@]}"$') wirklich auf "transfer.sh" hochladen? (Y/n): \e[0m' upload_files
fi

case "${upload_files:-y}" in
    "y"|"Y")
        # wegen der Fortschrittsanzeige wird "curl" für jede Datei ausgeführt.
        # die Parameter "--include" und "--form" unterdrücken die Fortschrittsanzeige.
        for file in "${file_array[@]}"
        do
            # Löschlink anzeigen und das Lösch-Token aus dem Antwortheader nach dem Hochladen herausfiltern.
            # es ist wichtig, "curl's" "stdout" mittels Subshell in einer Variable zu speichern oder an einen anderen Befehl umzuleiten,
            # der dann einfach nach "stdout" umleitet, um eine vernünftige Ausgabe zu erhalten.
            # die Fortschrittsanzeige wird nach "stderr" umgeleitet und wird nur angezeigt,
            # wenn "stdout" auf etwas umgeleitet wird; z.B. ">/dev/null", "tee /dev/null" oder "| <some_command>".
            # der Antwortheader wird nach "stdout" umgeleitet, daher ergibt es keinen Sinn, "stdout" nach "/dev/null" umzuleiten.
            # wenn "curl's" "stderr" nach "stdout" umgeleitet wird ("2>&1"), wird die Fortschrittsanzeige unterdrückt.
            curl_output=$(curl --request PUT --progress-bar --dump-header - --upload-file "${file}" "https://transfer.sh/")
            awk_output=$(awk \
                'gsub("\r", "", $0) && tolower($1) ~ /x-url-delete/ \
                {
                    delete_link=$2;
                    print "Löschbefehl: curl --request DELETE " "\""delete_link"\"";

                    gsub(".*/", "", delete_link);
                    delete_token=delete_link;
                    print "Lösch-Token: " delete_token;
                }

                END{
                    print "Download-Link: " $0;
                }' <<< "${curl_output}")

            # die Ergebnisse über "stdout" zurückgeben, "awk" macht das aus irgendeinem Grund nicht.
            echo -e "${awk_output}\n"

            # Ratenbegrenzung so weit wie möglich vermeiden; nginx: zu viele Anfragen.
            if (( ${#file_array[@]} > 4 ))
            then
                sleep 5
            fi
        done
        ;;

    "n"|"N")
        return 1
        ;;

    *)
        echo -e "\e[01;31mFalsche Eingabe: '${upload_files}'.\e[0m" >&2
        return 1
esac
Tool herunterladen
ParameterBeschreibungWertEnv
listenerZu verwendender Port für HTTP (:80)LISTENER
profile-listenerZu verwendender Port für Profiler (:6060)PROFILE_LISTENER
force-httpsWeiterleitung zu HTTPSfalseFORCE_HTTPS
tls-listenerZu verwendender Port für HTTPS (:443)TLS_LISTENER
tls-listener-onlyFlag, um nur TLS-Listener zu aktivierenTLS_LISTENER_ONLY
tls-cert-filePfad zum TLS-ZertifikatTLS_CERT_FILE
tls-private-keyPfad zum TLS-Private-KeyTLS_PRIVATE_KEY
http-auth-userBenutzer für einfache HTTP-Authentifizierung beim UploadHTTP_AUTH_USER
http-auth-passPasswort für einfache HTTP-Authentifizierung beim UploadHTTP_AUTH_PASS
http-auth-htpasswdHtpasswd-Dateipfad für einfache HTTP-Authentifizierung beim UploadHTTP_AUTH_HTPASSWD
http-auth-ip-whitelistKommagetrennte Liste erlaubter IPs für Upload ohne AuthentifizierungsaufforderungHTTP_AUTH_IP_WHITELIST
virustotal-keyVirusTotal-API-SchlüsselVIRUSTOTAL_KEY
ip-whitelistKommagetrennte Liste von IPs, die eine Verbindung zum Dienst herstellen dürfenIP_WHITELIST
ip-blacklistKommagetrennte Liste von IPs, die keine Verbindung zum Dienst herstellen dürfenIP_BLACKLIST
temp-pathPfad zum temporären OrdnerSystem-TempTEMP_PATH
web-pathPfad zu statischen Webdateien (für Entwicklung oder benutzerdefiniertes Frontend)WEB_PATH
proxy-pathPfadpräfix, wenn der Dienst hinter einem Proxy ausgeführt wird (ein /-Präfix wird entfernt)PROXY_PATH
proxy-portPort des Proxys, wenn der Dienst hinter einem Proxy ausgeführt wirdPROXY_PORT
email-contactE-Mail-Kontakt für das FrontendEMAIL_CONTACT
ga-keyGoogle-Analytics-Schlüssel für das FrontendGA_KEY
providerWelcher Speicheranbieter verwendet werden soll(s3, storj, gdrive oder local)
uservoice-keyUserVoice-Schlüssel für das FrontendUSERVOICE_KEY
aws-access-keyAWS-ZugriffsschlüsselAWS_ACCESS_KEY
aws-secret-keyAWS-GeheimschlüsselAWS_SECRET_KEY
bucketAWS-BucketBUCKET
s3-endpointBenutzerdefinierter S3-Endpunkt.S3_ENDPOINT
s3-regionRegion des S3-Bucketseu-west-1S3_REGION
s3-no-multipartDeaktiviert S3-Multipart-UploadfalseS3_NO_MULTIPART
s3-path-styleErzwingt Path-Style-URLs (erforderlich für Minio).falseS3_PATH_STYLE
storj-accessZugriff für das ProjektSTORJ_ACCESS
storj-bucketZu verwendender Bucket innerhalb des ProjektsSTORJ_BUCKET
basedirPfadspeicher für lokalen/gdrive-AnbieterBASEDIR
gdrive-client-json-filepathPfad zur OAuth-Client-JSON-Konfiguration für gdrive-AnbieterGDRIVE_CLIENT_JSON_FILEPATH
gdrive-local-config-pathPfad zum lokalen transfer.sh-Konfigurationscache für gdrive-AnbieterGDRIVE_LOCAL_CONFIG_PATH
gdrive-chunk-sizeChunk-Größe für gdrive-Upload in Megabyte, muss kleiner als verfügbarer Speicher sein (8 MB)GDRIVE_CHUNK_SIZE
lets-encrypt-hostsHosts für Let's-Encrypt-Zertifikate (kommagetrennt)HOSTS
logPfad zur LogdateiLOG
cors-domainsKommagetrennte Liste von Domains für CORS; Aktivierung aktiviert CORSCORS_DOMAINS
clamav-hostHost für ClamAV-FunktionCLAMAV_HOST
perform-clamav-prescanVorab-Scan jedes Uploads mit ClamAV (clamav-host muss lokaler clamd-Unix-Socket sein)PERFORM_CLAMAV_PRESCAN
rate-limitAnfragen pro MinuteRATE_LIMIT
max-upload-sizeMaximale Upload-Größe in KilobyteMAX_UPLOAD_SIZE
purge-daysAnzahl der Tage, nach denen die Uploads automatisch gelöscht werdenPURGE_DAYS
purge-intervalIntervall (Stunden) zum Ausführen der automatischen Bereinigung (außer S3 und Storj)PURGE_INTERVAL
random-token-lengthLänge des zufälligen Tokens für den Upload-Pfad (doppelte Größe für den Löschpfad)6RANDOM_TOKEN_LENGTH
NameVerwendung
latestNeuester CI-Build, kann nächtlich, bei Commit, bei Tag, usw. sein.
latest-norootNeuester CI-Build, kann nächtlich, bei Commit, bei Tag, usw. sein, unter Verwendung von [no root]
nightlyGeplanter CI-Build jeden Mitternacht UTC
nightly-norootGeplanter CI-Build jeden Mitternacht UTC, unter Verwendung von [no root]
edgeNeuester CI-Build nach jedem Commit auf main
edge-norootNeuester CI-Build nach jedem Commit auf main, unter Verwendung von [no root]
vx.y.zCI-Build nach dem Taggen eines Releases
vx.y.z-norootCI-Build nach dem Taggen eines Releases, unter Verwendung von [no root]

}

root@kitploit:~

</p></details>

#### Sample output
```bash
$ ls -lh
total 20M
-rw-r--r-- 1 <some_username> <some_username> 10M Apr  4 21:08 image.img
-rw-r--r-- 1 <some_username> <some_username> 10M Apr  4 21:08 image2.img
$ transfer image*
10240K  image2.img
10240K  image.img
20480K  total
Möchten Sie die obigen Dateien (2) wirklich auf "transfer.sh" hochladen? (Y/n):
######################################################################################################################################################################################################################################## 100.0%
Löschbefehl: curl --request DELETE "https://transfer.sh/wJw9pz/image2.img/mSctGx7pYCId"
Lösch-Token: mSctGx7pYCId
Download-Link: https://transfer.sh/wJw9pz/image2.img

######################################################################################################################################################################################################################################## 100.0%
Löschbefehl: curl --request DELETE "https://transfer.sh/ljJc5I/image.img/nw7qaoiKUwCU"
Lösch-Token: nw7qaoiKUwCU
Download-Link: https://transfer.sh/ljJc5I/image.img

$ transfer "image.img" | awk --field-separator=": " '/Delete token:/ { print $2 } /Download link:/ { print $2 }'
10240K  image.img
10240K  total
Möchten Sie die obigen Dateien (1) wirklich auf "transfer.sh" hochladen? (Y/n):
######################################################################################################################################################################################################################################## 100.0%
tauN5dE3fWJe
https://transfer.sh/MYkuqn/image.img```

<br />

---

<br />

## Contributions

Contributions are welcome.

<br />

---

<br />

## Creators

**Remco Verhoef**
- <https://twitter.com/remco_verhoef>
- <https://twitter.com/dutchcoders>

**Uvis Grinfelds**

<br />

---

<br />

## Maintainers

- **Andrea Spacca**
- **Stefan Benten**

<br />

---

<br />

## Copyright and License

Code and documentation copyright 2011-2018 Remco Verhoef.
Code and documentation copyright 2018-2020 Andrea Spacca.
Code and documentation copyright 2020- Andrea Spacca and Stefan Benten.

Code released under [the MIT license](https://github.com/dutchcoders/transfer.sh/blob/HEAD/LICENSE).