WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik



Im Homepage und Webhosting-Forum --- MySQL5 - Problem in der neuen Version

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.

Forum » PHP & MySQL » MySQL5 - Problem in der neuen Version - 21 Nov 2024 Antworten
im Forum für Webhosting Homepage gefunden:
MySQL5 - Problem in der neuen Version
TeX
Otto-Normal-Poster
Threadstarter




Beiträge: 51

Hi,

wenn man einen INSERT macht und hat z.b. solchen code:

1: 
2: 
3: 
4:
$anfrage = "INSERT INTO ".$tab_anf.TABLE_NAVI." (okate, pos, name)
values('$_POST[kid]', '$last_pos', '$_POST[kate_name]')";
mysql_query($anfrage, $link)
or die("Konnte Datensatz zur ".$tab_anf.TABLE_NAVI."-Tabelle"." nicht hinzufügen
MySQL meldet: ".mysql_error()."");


okate = INT(11) St.=0

Wenn nun z.B. die Var $_POST[kid] nichts enthält, dann erfolgt eine Fehlermeldung bei MySQL5: Out of range value adjusted for column 'okate' at row 1

Wenn man diese Var vorher prüft und wenn "" auf 0 setzt, dann funktioniert der INSERT, meine Frage ist nun ob sich das um nen Fehler in dieser Version handelt, so bleiben soll o. man vielleicht das mit Feld-Eigenschaften verändern kann?

Meine Version ist die 5.0.16-nt.

---
Ankauf leere Toner | Ankauf leere Tonerkartuschen

  Profil   E-Mail   Website   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Es ist kein Fehler sondern korrekt. In SQL können Zahlen zwar in Single-Quotes stehen (wie auch Strings), dennoch ist Standard-SQL eigentlich typensicher. Man muß also '0' schreiben. Ältere MySQL-Versionen machen ein automatisches Typecasting. Du solltest mit (int) sicherstellen, das die Variable eine Ganzzahl ist.

Bei dir fehlt außerdem völlig das Absichern der Formularwerte. Ein Angreifer kann daher beliebiges SQL bei dir einschleusen. Nutze mysql_real_escape_string().

Auch kommen Strings (wie die Arrayschlüssel) immer in Quotes. Unterbrich den String oder kennzeichne komplexe Variablen innerhalb des Strings mit {}.

---
Weaverslave

Diese Nachricht wurde geändert von: subjective
  Profil   Website   Editieren   Zitieren
TeX
Otto-Normal-Poster
Threadstarter




Beiträge: 51

ok, dann ist der Standart-Wert bei INT-Felder in dem Fall=nutzlos, tolle Sache machen die da, öhm das einschleusen von fremden Code ist nicht möglich da das System nur dateien vom eigenen Server zulässt und darin enthaltene Werte stimmen müssen die mit dem System dynamisch wechseln.

Na prima, dann darf ich nun so ca. 100 Systeme durchgehen und diese Fuck 0 schreiben lassen.

Besten Dank an Dich!

---
Ankauf leere Toner | Ankauf leere Tonerkartuschen

  Profil   E-Mail   Website   Editieren   Zitieren
raiserle
Mausakrobat




Beiträge: 172

also ich hab ne 4.1.14

habs dort gerade nochmal getestet
ich habe aber das feld gg , bei mir mit not null default '0' definiert

wenn ich jet nen insert mache

insert into tabelle (gg) values ('')

dann gehts bei mir, er setz dann den default wert 0 ein,
weis ja nun nicht ob es bei der 5er version anders ist, aber solte dort geanu so gehen
also die feldeigenschaften von standart 0 auf not null und default auf 0 setzen....
teste das mal und sag mir, ob es dann geht

gruß raiserle

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Der Standardwert wird bei "NOT NULL" Feldern genutzt, wenn man für sie als Wert NULL angibt. Er hat also sehr wohl eine Wirkung und Nutzen.

Das Einschleusen von SQL-Code ist möglich, da du die Werte aus dem Formular nicht absicherst. Ich kann also einfach die Formularwerte so manipulieren, so das ein mir genehmes SQL erzeugt wird. Mit Dateien hat dies nichts zu tun.

---
Weaverslave

  Profil   Website   Editieren   Zitieren
TeX
Otto-Normal-Poster
Threadstarter




Beiträge: 51

$_POST[var]=CLEAR_USER_VARS($_POST[var]);

In der Funktion wird sozusagen alles in Strings verwandelt und das passiert über z.b. einem INSERT, Befehle die die DB Betreffen werden auch gefiltert, also was da ankommt is auf jedenfall kein Befehl mehr. Schick mir mal ne Email an tex@ohne-host.de was Dir da so vorschwebt. Bin mal gespannt ob das ne Wirkung hat.

---
Ankauf leere Toner | Ankauf leere Tonerkartuschen

Diese Nachricht wurde geändert von: TeX
  Profil   E-Mail   Website   Editieren   Zitieren
TeX
Otto-Normal-Poster
Threadstarter




Beiträge: 51

raiserle schrieb am 14.12.2005 22:45

also die feldeigenschaften von standart 0 auf not null und default auf 0 setzen....
teste das mal und sag mir, ob es dann geht

gruß raiserle


Bei dem Feld ist `okate` int(10) NOT NULL default '0' eigestellt , das is ja das Prob, also in diesem Fall=nutzlos, o. mal andersrum, poste mal die Feldeigenschaften das der Code unter der 5er Version funktioniert wie er oben steht.

---
Ankauf leere Toner | Ankauf leere Tonerkartuschen

Diese Nachricht wurde geändert von: TeX
  Profil   E-Mail   Website   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Natürlich sind die Werte in $_POST Strings - sie sind immer Strings. Ich könnte beispielweise einen zweiten Datensatz einfügen, in dem ich das Feld beende. Interessanter wird es bei SELECTs - ich könnte da dann alle Daten aus der DB ziehen. Google halt einfach mal nach "SQL-Injection".



---
Weaverslave

  Profil   Website   Editieren   Zitieren
raiserle
Mausakrobat




Beiträge: 172

@ tex:
das war ja meine frage, ob das bei der 5er dann auch so geht....
normalerweise sollte er ja auch dort, wenn das feld angegben wird
und kein value gesetzt wird der default genommen werden.

subjective, wenn ich das richtig verstanden habe, sollte meine aussage ja auch für die 5er stimmen, oder irre ich da?
wenn meine aussage stimmt, ist was an den feldeigenschaften bei dir nicht io , tex.

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Der SQL-Code ist fehlerhaft nicht die Attribute. '' ist ein leerer String - mit automatischem Typecasting wird daraus 0 - also das gleiche wie der Defaultwert (es wird _nicht_ der Defaultwert verwendet).

Korrekterweise muß dort also nicht '', nicht '0' sondern NULL stehen um den Defaultwert zu nutzen.

---
Weaverslave

  Profil   Website   Editieren   Zitieren
TeX
Otto-Normal-Poster
Threadstarter




Beiträge: 51

Ander mal bitte den SQL-Code ab (Feld: okate) so wie es sein soll, ich hab nun alle möglichen Varianten probiert, aber der "Fehler" ist bei jeder Einstellung vorhanden.

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8:
CREATE TABLE `gp_navi` (
  `id` int(11) NOT NULL auto_increment,
  `okate` int(11) NOT NULL default '0',
  `pos` int(10) NOT NULL default '0',
  `z_p` char(1) NOT NULL default '',
  `name` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
);


---
Ankauf leere Toner | Ankauf leere Tonerkartuschen

  Profil   E-Mail   Website   Editieren   Zitieren
raiserle
Mausakrobat




Beiträge: 172

thx subjective, ;)
also bedeutet das die 5er keine automatische typconvertierung mehr macht,
der versteh ich das jetzt wieder falsch

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Und nochmal - der Fehler leigt nicht in der Tabellendefinition, sondern im SQL mit dem du das Insert machst. Dort muß entweder eine Nummer (optional in Quotes) oder NULL hin. Wenn du möchtest, das der Standardwert verwendet wird, muß da NULL hin oder das Feld gar nicht angegeben werden.

Im SQL-Standard ist strenge Typisierung vorgesehen. Wenn du zB mal PostgreSQL einsetzt, bemerkt man das recht schnell *g*. MySQL 5 behebt also eigentlich nur einen Mangel. Allerdings sollte das auch umschaltbar sein, wenn ich mich nicht irre.



---
Weaverslave

  Profil   Website   Editieren   Zitieren
raiserle
Mausakrobat




Beiträge: 172

thx, subjective.
naja, das ist ja ein gut nutzbarer fehler von der 4.x.x, wenn man es mal von der seite betrachtet

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Nein auch unter MySQL 4.x wäre es falsch. Da dort immer 0 eingesetzt wird (durch die Typkonvertierung) und nicht der Standardwert. Bei dir klappte es nur zufällig gerade weil dieser Wert dem Standardwert entsprach.

---
Weaverslave

  Profil   Website   Editieren   Zitieren
 

Antworten
Forum » PHP & MySQL » MySQL5 - Problem in der neuen Version

Aktuelle Beiträge zur Hilfe im Forum für Homepage - MySQL5 - Problem in der neuen Version im Forum Homepage Hosting AntwortenLetztes Posting
Cybersicherheit für Unternehmen
in "PHP & MySQL"
3 18.11.2024 14:05 von Gaswer
Wirtschaftslage in der Ukraine
in "PHP & MySQL"
3 22.10.2024 15:04 von Gaswer
Rangliste (Ohne Mysql) (Kompliziertes Ordner System)
in "PHP & MySQL"
3 19.07.2021 06:00 von newtopblog
kleines problem mit phpadmin
in "PHP & MySQL"
5 11.04.2021 22:22 von Zavylon
Counter mit PHP
in "PHP & MySQL"
4 22.03.2021 16:29 von Robeni
Fehlermeldung beim Importieren der Datenbank in phpmyadmin
in "PHP & MySQL"
0 02.08.2019 22:14 von iFuchs
CMS für Online Shop
in "PHP & MySQL"
18 26.05.2019 13:29 von raiserle
Regestrierungproblem
in "PHP & MySQL"
3 28.11.2018 13:20 von norbertofahey
PHP Datum ausgeben?
in "PHP & MySQL"
1 19.10.2018 10:04 von Klaus1973
PHP befehl ausführen
in "PHP & MySQL"
11 16.08.2018 09:08 von Klaus1973
Visual Composer selber programmieren?
in "PHP & MySQL"
0 22.01.2017 23:45 von Redji



Besucher : 8126505    Heute : 423     Gestern : 463     Online : 181     21.11.2024    13:45      0 Besucher in den letzten 60 Sekunden        
Nach oben