Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Anfängerfragen ›

In SQL Datenbank schreiben

Eingetragen von Giga300 (6)
am 18.11.2022 - 19:04 Uhr in
  • Anfängerfragen
  • Drupal 9.x

Hallo!

Ich versuche in eine SQL Datenbank zu schreiben, leider bekomme ich immer einen Fehler, ich bin mir sicher das ich was falsch mache.

Warning: mysqli_connect(): (HY000/1045): Access denied for user ''@'localhost' (using password: NO) in sqladd() (line 45 of /var/www/domain/html/modules/contrib/php/php.module(81) : eval()'d code)

Ich versthe nicht warum ich einen Acess denied Error habe, die Datenbankdaten sind im Conifg File hinterlegt und funktionieren mit einer anderen Seite.
Das ist mein Code:

Add your domain:

<?php
require_once DRUPAL_ROOT . '/inc/config.inc.php';

if (isset(
$_GET["domain"])) { $domain = $_GET["domain"]; sqladd(); };

function
sqladd() {
   
global
$dbhost;
global
$dbuser;
global
$dbpwd;
global
$dbase;

global
$domain;


$domain = str_replace("http://", "", $domain);

$domain = str_replace("https://", "", $domain);

$domain = str_replace("www.", "", $domain);

$domain = explode("/", $domain, 2)[0];

$domain = strtolower($domain);

$domain = htmlspecialchars($domain);


  if (!
is_valid_domain_name($domain)) {

  
$secure = "NO";
  
show_error();

  }
 
 
$link = mysqli_connect($dbhost, $dbuser, $dbpwd, $dbase);

// Check connection
if($link === false){
    die(
"ERROR 112: Could not connect. " . mysqli_connect_error());
}

// Attempt insert query execution
$sql = "INSERT INTO domaindb (domain, userid)
VALUES ('
$domain', '$uid')";
if(
mysqli_query($link, $sql)){
echo
"Domain: " . $domain . " added";
} else{
    echo
"ERROR 113: Could not able to execute:" . $sql . mysqli_error($link);
}

// Close connection
mysqli_close($link);

}

function
is_valid_domain_name($domain) {

 
// Thanks to http://stackoverflow.com/a/4694816

 
return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain) //valid chars check

   
&& preg_match("/^.{1,253}$/", $domain) //overall length check

   
&& preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain)   ); //length of each label

}

function
show_error() {
   
    echo
"ERROR!";
}
?>

Vielen Dank!

‹ [Gelöst] Rote Einträge auf der Seite: "/admin/reports/updates" wie beheben? In SQL Datenbank schreiben ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich weiß gar nicht wo ich anfangen soll

Eingetragen von C_Logemann (912)
am 18.11.2022 - 20:49 Uhr

Hallo Giga300,
Du hast das hier als Anfängerfrage gepostet. Ich habe beim Überfliegen des Codes auch ein grobe Vorstellung, was hier geplant ist. Aber das ganze beweg sich soweit weg von üblichen Drupal Programmierempfehlungen, das ich nicht weiß wo ich anfangen soll. Aber das ist auch der hauptsächliche Grund, warum ich mir die Mühe mach hier einen Kommentar zu schreiben: Das obige Beispiel ist selbst wenn es funktionieren würde etwas vor dem ich warnen möchte.

Skuril ist schon mal, daß hier das php.module im Einsatz ist. Heißt das, daß sich dieser Code-Schnippsel auch noch in der Datenbank selbst "versteckt"? Was mich aber am meisten besorgt ist die Verarbeitung einer User-Eingabe bei einer SQL-Abfrage. Da frage nicht nur ich mich "Is htmlspecialchars enough to prevent an SQL injection on a variable enclosed in single quotes?". Da ich pures PHP in Drupal nur benutze, wenn die Drupal API und das Symfony Framework auf dem Drupal seit Version 8 aufbaut, habe ich ehrlich gesagt noch nie eine Datenbank selbst angesprochen. Aber gerade dieser Part in Drupal wird ständig optimiert, um reale Angriffsszenarien abzufangen.

Bezüglich der Fehlermeldung scheinen hier nicht nur die die Datenbank Credentials zu fehlen (übernommen worden zu sein), die aber dann als erstes als Fehler erkannt werden. Hier könnte man zuerst mal überprüfen, ob diese auch wirklich vorhanden sind. Variablen, die unerwartet leer sind führen of zu sehr bösen Fehlern.

Und wo soll denn der Inhalt der Variable $uid herkommen? Ich nehme an, hier soll die User ID des aktuellen Users und sei es User 0 (Gast) gemeint sein. Aber vllt. liefert ja auch das PHP Modul (das man am besten nicht benutzen sollte, siehe auch Warnung auf der Modul-Seite selbst) noch etwas Kontext.

Nun ja, selbst wenn man nicht in die Haupt-Datenbank von Drupal schreiben möchte kann man in der settings.php eine zweit Datenbank angeben und dann auch in diese schreiben via Drupal API. Aber je nachdem in welchen Situationen man überhaupt etwas in der Datenbank festhalten möchte, worauf dann nicht mehr so leicht von Drupal aus zugreifen kann wie bei Drupal internen logs oder eigenen Entitäten etc. kann das ganze auch schnell mal Performance-relevant sein. Aber um hier irgend etwas beurteilen so können wäre mehr allgemeiner Kontext sinnvoll. Dieses eher rohe PHP script ist nicht wirklich etwas, was ich weiter analysieren möchte. Statt dessen lade ich Dich ein, Dich mit bewährten Drupal Programmier-Anleitungen zu beschäftigen oder jemanden zu engagieren, die/der sich damit auskennt.

In jedem Fall wünsche ich Dir viel Erfolg bei Deinem Projekt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für deine AntwortIch

Eingetragen von Giga300 (6)
am 19.11.2022 - 18:47 Uhr

Hallo C_Logemann, danke für deine Antwort!

Ich habe es fast geschaft aber ich brauche noch ein wenig Hilfe ..

mfg, mike

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wichtiger Link: Writing secure code for Drupal

Eingetragen von C_Logemann (912)
am 20.11.2022 - 13:06 Uhr

Insbesondere für diese Aufgabe, der security Hinweis für Datenbank-Zugriffe.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich dachte mit den PHP Modul

Eingetragen von Giga300 (6)
am 21.11.2022 - 11:22 Uhr

Ich dachte mit den PHP Modul kann ich PHP Scripts online stellen, nun habe ich verstanden das es nicht so ganz einfach ist.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 4 Tagen
  • Hey danke
    vor 1 Woche 5 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 3 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 3 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 1 Tag
  • In der entsprechenden View
    vor 3 Wochen 1 Tag
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 1 Tag
  • gelöst
    vor 5 Wochen 4 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 12 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association