Argumente für Selfhosting?

Hallo liebe Community sowie die lieben Selfhostler unter euch,

ich bräuchte mal kurz eure Hilfe. Ich bin seit einiger Zeit ziemlich datenschutzbedacht und achte sehr auf meine IT-Sicherheit. Dennoch komme ich an einigen Apps wie bspw. Google Photos zum Sichern der Fotos nicht vorbei - bzw. hab mich noch nicht genug mit Alternativen befasst. Bzw. generell mal mit dem Thema Selfhosting.

Ich habe daheim unter anderem einen Raspberry Pi, der gerade nicht in Verwendung ist (4B, 2GB RAM) und einen vServer bei Hetzner (2vCPU, 4GB RAM). Habe seit kurzem Tailscale für mich entdeckt, um meine Geräte und die beiden Server zu vernetzen (auch unterwegs etc.). Auf dem Server bei Hetzner läuft auch ein Airsonic, welcher Medieninhalte an die Familie verteilt. Zuhause sind noch ein Adguard, ein Musikstreaming Pi und ein NAS im Einsatz. Das NAS ist mir aber ehrlich gesagt zu langsam und würde sich deshalb nur als Cold-Storage für Backups oder so anbieten (meiner Meinung nach)...

Abgesehen davon hat diese Selfhosting Thematik jetzt aber doch sehr großes Interesse bei mir geweckt und ich glaube ich möchte gern möglichst viele Sachen selbst hosten. Dazu werde ich mir nachher nochmal Listen anschauen. Gibt es da irgendwelche Empfehlungen eurerseits? Bei Nextcloud hatte ichvor einiger Zeit beim testen immer wieder "Synchronisierungprobleme", das nervte etwas...

Jetzt aber zu meiner eigentlichen Frage... Welche Argumente gibt es für das Selfhosten von Diensten? Wie argumentiert ihr dafür? Warum nicht managed Sachen verwenden, wie bspw. Google Drive oder so? (Das habe ich im Moment im Einsatz, zusammen mit Google Photos). Warum selfhosted ihr? Und vor allem, was?

Argumente die ich meistens für Dienste wie Google Photos oder Drive höre sind, "Die Chance das Google gehackt wird gegenüber das was selbst gehostetes ausfällt ist doch viel geringer". Meine Dateien würden dann vermutlich in einer Storagebox bei Hetzner liegen, welche ich in das Dateisystem mit einbinde... Somit sind sie zwar nicht lokal bei mir, aber immerhin nicht in den Händen der Cloudriesen.. Was denkt ihr dazu?

Vielen Dank schon an alle im voraus!

Viele Grüße :)

Server, Computer, Datenschutz, Google, IT, IT-Sicherheit, Cloud, Hetzner
Python Selenium Cookie Button drücken?

Hallo Community :)

Ich schreibe zur Zeit ein Script, welches bestimmte Aktionen auf einer Webseite automatisiert aufruft. Nur leider muss ich beim Seitenaufruf von Thalia.de Cookies akzeptieren. Ich habe also mit den Entwickler Werkzeugen des Browser nach dem Klassennamen gesucht und versucht, den Button "Alles akzeptieren", damit zu drücken. Nur leider funktioniert das nicht - er findet das Element nicht. Dazu sei gesagt, dass es sich dabei um ein Popup handelt, welches durch das usercentrics Script aufgerufen wird... hat das darauf irgendwie einfluss?

Es wäre nett, wenn da vielleicht mal jemand drüber schaut, warum es nicht funktioniert und was ich stattdessen ändern müsste...

Danke schon mal im Voraus :)

Probiert habe ich es mit folgendem Code:

accept_cookies_button = browser.find_element(By.LINK_TEXT,'Alles akzeptieren')
accept_cookies_button = browser.find_element(By.XPATH,'/html/body/div//div/div/div[2]/div/div[2]/div/div[2]/div/div[1]/div/button[2]')
accept_cookies_button = browser.find_element(By.CSS_SELECTOR,".sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CLASS_NAME,"sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CSS_SELECTOR,"button.sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CLASS_NAME, "jrCGbv")

Nach wie vor funktioniert kein Eintrag davon. Selbstverständlich löse ich danach noch ein .click() aus, jedoch schließt sich an dieser Stelle der Browser und Python bringt den Fehler, dass er das Element nicht finden würde...

Hat da noch jemand Ideen? :)

HTML, CSS, JavaScript, Python, Webentwicklung, Python 3, Selenium
Sind meine Daten bei Google sicher? Lohnt sich Datenschutz noch?

Hallo an alle Leser :)

Kurz vorweg: Ich bin noch Schüler, 11. Klasse. Jedoch sehr technikaffin mit einem hohen technischen Verständnis. Ihr könnte daher gern eure freie Meinung raushauen. Bitte jedoch keine gehässige, wenn dann eher konstruktive Kritik :P

Ich habe mir in der letzten Zeit ein paar Gedanken zum Thema Datenschutz bei Google gemacht. Ich bin in letzter Zeit sehr hin und her gerissen, ob ich mich weiter Google's Datensammlerei wiedersetze oder es einfach zu meinem "Vorteil" nutze. Im Moment überlege ich mir noch recht genau ob ich Google jetzt diese und jene Daten von mir geben will. Ich benutze aber auch jetzt Google Dienste und kann dort auch nicht ganz weg.

Ich meine, ich kann mich zwar Facebook entziehen, indem ich WhatsApp nicht nutze, aber sich Google zu entziehen ist schon etwas schwieriger. Ich kenne Leute die das machen.. Entgoogeltes Smartphone, DuckDuckGo als Suchmaschiene, OpenStreetMaps statt Google Maps, Nextcloud statt Drive, etc. etc.

Ich benutze ein Android Smartphone. Also sammelt Google sowieso schon darüber Daten über mich. Ich benutze GMail. Ich benutze Google als Suchmaschiene. Ich benutze Maps zum navigieren...

Die Frage die ich mir stelle: Google wird sowieso in Zukunft immer präsenter in unserem Leben, wieso kann man dann die Vorteile nicht nutzen? Google Docs für Notizen und Dokumente (insbesondere Unterrichtsnotizen - auch in Live-Zusammenarbeit mit anderen Schülern), Drive als Onlinespeicher, Chrome als Standartbrowser inkl. Synchronisierung, etc.

Klar gibt man Google dann seine Daten... Aber Google weiß doch sowieso schon alles über einen... Warum sich dann den Vorteilen verschließen?

Da fällt mir noch ein.. Was haltet ihr vom Google Passwortmanager? Der hat ja mittlerweile auch On-Device-Encryption... Kann man seine Passwörter dort speichern? Aktuell benutze ich NordPass als Passwortmanager und empfehle jedem, der kein Geld ausgeben will, Bitwarden zu verwenden.

Ob mit Passwortmanager oder ohne - Mein Google Konto wäre dann halt ein zentraler Bestandteil meines Lebens im Internet. Deshalb erfolgt der Zugriff auch nur auf vertrauenswürdigen Geräten, unter Verwendung eines Hardware-Schlüssels (Yubikey).

Was haltet ihr davon?

Danke schon mal im Vorraus!

Nun allen noch einen schönen Sonntag und viele Grüße :)

Computer, Internet, Google, Datenschutzrecht, Google Chrome, Google-Konto
PHP dynamisch mit unterschiedlichen Datenbanken verbinden?

Hallo!

Folgende Situation:

Es gibt mehrere Datenbanken. Eine für alle Installationen meines Projektes (beinhaltet Zugangsdaten für Schul-DB's) und dann weitere, schulspezifische Datenbanken, in denen jeweils andere Dinge stehen (wie zum Beispiel Schüler mit ihren Logindaten, etc.)

Der Benutzer ruft also eine Loginseite auf und gibt eine Schul-ID ein. Nach Buttonklick wird die an ein PHP-Skript übergeben, welche dann aus der Datenbank aller Instanzen die entsprechenden Zugangsdaten für die schulspezifische Datenbank ausliest (anhand der Schul-ID).

Anschließend sollen diese als Variable gesetzt werden, sodass von überall in diesem Skript darauf zugegriffen werden kann. Dabei soll das Ganze allerdings nur für diese Session ersetzt werden und nicht in der Datei. Sodass andere Schüler andere Schul-ID's und damit auch andere Schul-DB's verwenden können.

Wenn der Benutzer dann auf der Loginseite seinen Benutzernamen und sein Passwort eingibt, wird dieses wieder an das PHP-Skript übergeben, welches nun in der schulspezifischen DB nachschaut, ob dort der entsprechende Nutzer existiert.

Folgendes Schema habe ich bis jetzt:

class DB {
  private static $_api_username = "root";
  private static $_api_password = "";
  private static $_api_host = "localhost";
  private static $_api_name = "programmingnow_host";
  private static $_api;

  private static $_db_username = $_SESSION['school_db_user'];
  private static $_db_password = $_SESSION['school_db_pass'];
  private static $_db_host = "localhost";
  private static $_db_name = $_SESSION['school_db_name'];
  private static $_db;

  function __construct() {
    try {
      self::$_api = new PDO("mysql:host=" . self::$_api_host . ";dbname=" . self::$_api_name . ";charset=utf8mb4",  self::$_api_username , self::$_api_password);

      if (isset($_SESSION['school_db_name'])) {
        self::$_db = new PDO("mysql:host=" . self::$_db_host . ";dbname=" . self::$_db_name . ";charset=utf8mb4",  self::$_db_username , self::$_db_password);
      }
    }
    catch(PDOException $e) {
      echo "Datenbankverbindung gescheitert!";
      die();
    }
  }
  
  function connectToSchoolDB($school_id) {
    $stmt = self::$_api->prepare("SELECT instance_db_name, instance_db_user, instance_db_pass FROM instances WHERE instance_key=:instance_key");
    $stmt->bindParam(":instance_key", $school_id);
    $stmt->execute();
    $result = $stmt->fetch();
    $result['instance_db_name'] = $_SESSION['school_db_name'];
    $result['instance_db_user'] = $_SESSION['school_db_user'];
    $result['instance_db_pass'] = $_SESSION['school_db_pass'];
  }

  [..] // Der ganze Rest an Funktionen (wie Login)
} 

Der obige Code funktioniert aber nicht.

Könnt ihr mir da helfen? Wie kann ich das realisieren bzw. wo liegt der Fehler?

Danke schon einmal im Voraus!

VG!

Computer, Technik, HTML, Webseite, programmieren, MySQL, PHP, Technologie, Webentwicklung
Javascript nach Button Klick auf andere Webseite leiten?

Moin!

Ich hab folgende Frage: Wie kann ich es realisieren, dass, wenn ich auf den Success Button klicke, ich dann auf eine andere Seite geleitet werde? Der Link dahin ist auch ein Teil dynamischer PHP Code. Ihr werdet es sehen :)

Hier mein Code:

"use strict";!function(){const n=document.querySelector(".suspend-user"),t=(n&&(n.onclick=function(){Swal.fire({title:"Bist du sicher?",text:"Du kannst diesen Benutzer nicht wiederherstellen!",icon:"warning",showCancelButton:!0,confirmButtonText:"Fortsetzen",cancelButtonText:"Abbrechen",customClass:{confirmButton:"btn btn-primary me-2",cancelButton:"btn btn-label-secondary", text:"Abrechen"},buttonsStyling:!1}).then(function(n){n.value?Swal.fire({icon:"success",title:"Benutzer gelöscht!",text:"Der Benutzer wurde gelöscht.",customClass:{confirmButton:"btn btn-success"}}):n.dismiss===Swal.DismissReason.cancel&&Swal.fire({title:"Vorgang abgebrochen",text:"Der Benutzer wurde nicht gelöscht.",icon:"error",customClass:{confirmButton:"btn btn-success"}})})}),document.querySelectorAll(".cancel-subscription"));t&&t.forEach(n=>{n.onclick=function(){Swal.fire({text:"Are you sure you would like to cancel your subscription?",icon:"warning",showCancelButton:!0,confirmButtonText:"Yes",customClass:{confirmButton:"btn btn-primary me-2",cancelButton:"btn btn-label-secondary"},buttonsStyling:!1}).then(function(n){n.value?Swal.fire({icon:"success",title:"Unsubscribed!",text:"Your subscription cancelled successfully.",customClass:{confirmButton:"btn btn-success"}}):n.dismiss===Swal.DismissReason.cancel&&Swal.fire({title:"Cancelled",text:"Unsubscription Cancelled!!",icon:"error",customClass:{confirmButton:"btn btn-success"}})})}})}();

Und ich möchte gern auf folgende Seite weitergeleitet werden:

index.php?page=deleteUser&&delete_id=<?=$user_data['user_id']?>

Könntet ihr mir hier behilflich sein? Wenn ich auf den Button "Fortsetzen" klicke erscheint noch eine Bestätigungsnachricht, wenn man dann auf "OK" klickt, soll der Redirect ausgeführt werden.

Danke euch im Vorraus!

HTML, programmieren, JavaScript, PHP, Technologie, Webentwicklung
Python nur bestimmte dateien in zip archiv speichern?

Hallo Leute,

es geht um folgendes. Eine Funktion (siehe unten) soll ein Zip Archiv erstellen. Dieses soll alle Dateien aus dem verzeichnis /main/content/data beinhalten. Danach wird das ZIP verschlüsselt. Das Ver-, bzw. entschlüsseln funktioniert wunderbar. Nur finde ich, wenn ich das Zip Archiv dann wieder entschlüssele plötzlich nicht die Dateien aus /main/content/data - sondern ebenfalls die Ordner main, content und data. Also die werden mit in das Archiv gepackt. Das sollen Sie aber nicht. Und ich kann meinen Fehler beim besten Willen nicht finden...

Währe nett, wenn mir mal kurz jemand helfen könnte!

Danke im Voraus!

Hier mein Code:

def createEncryptedZIP(compress = zipfile.ZIP_DEFLATED):
    global zip_path
    global zip_name
    global original_path
    
    folder ='main\\content\\data'
    zip_name = simpledialog.askstring(title="Enter Filename", prompt="Enter file name for the new filecontainer")
    zip_path=os.path.join(os.path.dirname(__file__), 'main\\content\\secdrives\\')+zip_name+".secdrive"
    original_path=zip_path
    with zipfile.ZipFile(zip_path, 'w', compress) as target:
        for (root, dirs, files) in os.walk(folder):
            for file in files:
                add = os.path.join(root, file)
                target.write(add)
    to_encrypt = open(zip_path, "rb").read()
    size = len(to_encrypt)
    key = open(keyfile, "rb").read()
    encrypted = bytes(a ^ b for (a, b) in zip(to_encrypt, key))
    with open(zip_path, "wb") as encrypted_out:
        encrypted_out.write(encrypted)
    filelist = glob.glob(os.path.join('main\content\data', "*"))
    for f in filelist:
        os.remove(f)
    print(showinfo("New filecontainer created successfully", "You created a new filecontainer:\n\n"+zip_path))
    label_local.configure(text="Local File: "+zip_path)

Datei wieder entschlüsseln:

def decrypt_direct():
    file = open(zip_path, "rb").read()
    key = open(keyfile, "rb").read()
    decrypted = bytes(a ^ b for (a, b) in zip(file, key))
    with open(zip_path, "wb") as decrypted_out:
        decrypted_out.write(decrypted)
    os.rename(original_path, original_path+".zip")
    with zipfile.ZipFile(zip_path+".zip",'r') as source:
        source.extractall(decrpytion_path)
    subprocess.call(["subst y: " +'"'+os.path.join(os.path.dirname(__file__), 'main\\content\\data')+'"'], shell=True)
    print(showinfo("Decryption Successfull", "Decryption of \n\n "+zip_path+" \n\nSuccessfull!"))


Ganz am Anfang vom File:

decrpytion_path='main\\content\\data'
Python, Python 3
Python - tkinter text eingabe in variable?

Hallo,

ich habe folgendes programmiert:

import tkinter as tk
import os


root = tk.Tk()
root.geometry("400x240")


def encrypt(filename):
    to_encrypt = open(filename, "rb").read()
    size = len(to_encrypt)
    key = os.urandom(size)
    with open(filename + ".lqk", "wb") as key_out:
        key_out.write(key)
    encrypted = bytes(a ^ b for (a, b) in zip(to_encrypt, key))
    with open(filename, "wb") as encrypted_out:
        encrypted_out.write(encrypted)  
    filename = textExample.get(1.0, tk.END+"-1c")
    encrypt(filename)




def decrypt(filename, key):
    file = open(filename, "rb").read()
    key = open(key, "rb").read()
    decrypted = bytes(a ^ b for (a, b) in zip(file, key))
    with open(filename, "wb") as decrypted_out:
        decrypted_out.write(decrypted)
    fileTest = filename + ".lqk"
    try:
        os.remove(fileTest)
    except OSError as e:
        print(e)
    else:
        print("Datei erfolgreich gelöscht!")
    filename = textExample.get(1.0, tk.END+"-1c")
    decrypt(filename, filename + ".lqk")
    
    


textExample=tk.Text(root, height=10)
textExample.pack()
btnEncrypt=tk.Button(root, height=1, width=10, text="Encrypt", 
                    command=encrypt)
btnDecrypt=tk.Button(root, height=1, width=10, text="Decrypt", 
                    command=decrypt)


btnEncrypt.pack()
btnDecrypt.pack()


root.mainloop()

Nur leider funktioniert dies nicht. In der Debugging Console bekomme ich folgende Fehlermeldung:

Bei der Encrypt Funktion:

PS C:\Users\elias\Desktop\Python>  c:; cd 'c:\Users\elias\Desktop\Python'; & 'C:\Users\elias\AppData\Local\Programs\Python\Python310\python.exe' 'c:\Users\elias\.vscode\extensions\ms-python.python-2021.12.1559732655\pythonFiles\lib\python\debugpy\launcher' '52518' '--' 'c:\Users\elias\Desktop\Python\main.py'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: encrypt() missing 1 required positional argument: 'filename'


Decrypt Funktion:

Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: decrypt() missing 2 required positional arguments: 'filename' and 'key'      


Wie kann ich das Problem jetzt lösen?

Danke im Vorraus!

VG!

programmieren, Python, Python 3, Tkinter