In SQL Datenbank schreiben
Eingetragen von Giga300 (6)
am 18.11.2022 - 19:04 Uhr in
am 18.11.2022 - 19:04 Uhr in
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!
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich weiß gar nicht wo ich anfangen soll
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.
# DrupalCenter-Moderator # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: Tech. Concepts | Security + Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen
Danke für deine AntwortIch
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
Wichtiger Link: Writing secure code for Drupal
am 20.11.2022 - 13:06 Uhr
Insbesondere für diese Aufgabe, der security Hinweis für Datenbank-Zugriffe.
# DrupalCenter-Moderator # https://www.drupal.org/u/c-logemann
# CTO der Nodegard GmbH: Tech. Concepts | Security + Availability Operations / Wir unterstützen IT-Abteilungen, Agenturen, Freiberufler:innen
Ich dachte mit den PHP Modul
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.