abonnement Unibet Coolblue Bitvavo
pi_35014454
En waarom gebruik je daar addslashes()

(Dat ligt trouwens niet aan die irritante magic qoutes maar aan register globals)
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_35014717
@mooya

Het gaat daar over register_globals, en die staat bij de meeste installaties op Off om veiligheidsrisco's tegen te gaan. De tweede manier is de manier waarop je het behoort te doen

edit:
En wat SuperRembo ook zegt, die addslashes() daar is eigenlijk onzinnig, die hoor je pas te doen zodra je de query maakt.
pi_35015293
ik verzamel eerst de variabele die uit een formulier komen.
en daar haal ik die addslashes en htmlspecialchars overheen..
en dan stop ik ze in de database..

thuis werkte die goed, maar nu dus niet meer..
En register_globals is toch dat je een variabele kan ophalen zonder $_POST[] en $_GET[]?

[ Bericht 0% gewijzigd door mooya op 12-02-2006 21:22:28 (typo) ]
pi_35016664
quote:
Op zondag 12 februari 2006 21:02 schreef mooya het volgende:
Ik heb een irritant probleem met de Magic Quotes..
ik heb thuis mijn website gemaakt zonder magic_quotes. en nou zet ik hem op Internet en daar staat hij AAN.. dus al mijn invoervelden krijgen een extra slash..

ik heb het e.e.a geprobeert...
- set_magic_quotes_runtime(0);
- een htacces file aangepast

En de onderstaande code in mijn include bestand geplakt:
[ code verwijderd ]

Ik haal mijn variabele op als:
$woonplaats = addslashes(htmlspecialchars($woonplaats));
ipv:
$woonplaats = addslashes(htmlspecialchars($_POST['woonplaats']));
Als ik de 2e optie gebruik dan werkt het goed.. maar bij de 1e niet..
En ik zie het ook niet echt zitten om alles weer om te gooien.

Iemand een idee?
De waarde van woonplaats zal ergens in je script geset moeten worden.
$woonplaats = $_POST['woonplaats'];
Als je dit bovenaan je script zet dan hoef je verder niets te veranderen. Staan er dan overal slashes omheen dan tik je
$woonplaats = stripslashes($_POST['woonplaats']);

Om verder getik in je script te voorkomen doe je het in een keer goed
$woonplaats = htmlspecialchars(stripslashes($_POST['woonplaats']));
pi_35017310
quote:
Op zondag 12 februari 2006 21:55 schreef beerten het volgende:
Om verder getik in je script te voorkomen doe je het in een keer goed
$woonplaats = htmlspecialchars(stripslashes($_POST['woonplaats']));
htmlspecialchars is een functie die invloed uitoefent op output. Deze pas je dus niet toe bij het valideren van input.

Als je het in een keer goed doet, houdt je php en html zoveel mogelijk gescheiden en gebruik je templates.
  zondag 12 februari 2006 @ 22:09:49 #106
12221 Tijn
Powered by MS Paint
pi_35017380
Ja, templates, dat heb ik nou al een paar keer horen vallen. Weet iemand een goeie site die me dat uitlegt?
  zondag 12 februari 2006 @ 22:13:30 #107
65471 SkaterSam
Lurking Galore
pi_35017562
Ok, bij de set_error_handler() functie krijg je dus ook de variabele $errstr, waarin de beschrijving van een error zit. Heel handig enzo, maar nou heb ik dus een functie die errors opvangt en dan verwijst naar een error.html pagina, en dan wordt er een mail naar mij gestuurd:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function pageError($errno, $errstr, $errfile='?', $errline= '?') { 
   $reportMail = 'bla@gmail.com';
   $redirectPage = 'error/error.html'; 
   if (($errno & error_reporting()) == 0)
   return;
   $err = '';
   switch($errno) {
      case E_ERROR: $err = 'FATAL'; break;
      case E_WARNING: $err = 'ERROR'; break;
      case E_NOTICE: return;
   }
   
   $message = "Er is een error geconstateerd op een van de pagina's<br /><br />";
   $message .= "De error gebeurde in het volgende bestand:<br />";
   $message .= $errfile . "<br /><br />";
   $message .= "Op lijn <b>$errline</b> deed zich de volgende error voor:<br />";
   $message .= $err . ", nr. " . $errno . ": " .  $errstr . "<br /><br /><br />";
   $message .= "-------------------------------------------------------------<br />";
   $message .= "-- <i>Dit bericht is automatisch gegenereerd door BLIK BOT</i> --";
   
   $headers = 'MIME-Version: 1.0' . "\r\n";
   $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
   $headers .= 'From: BLIK Bot <blikbot@blik.nl>' . "\r\n";   
   
   
   mail($reportMail, "BLIK Error", $message, $headers); 
   print '<META HTTP-EQUIV="Refresh" CONTENT="0;url=' . $redirectPage . '">';
   exit(); 

Allemaal leuk en aardig, maar het enige probleem is dus dat de $errstr blijkbaar een link naar de PHP manual bevat (hier kwam ik achter in een non-HTML mailtje, dus dan zie je bijvoorbeeld dit:
quote:
move_uploaded_file(/map/image.jpg) [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: failed to open stream: No such file or directory
In de HTML mailtjes is dat <a href> wel weggehaald, maar is het geen link. Mijn vraag is dus of ik dat kan veranderen, dus gewoon die hele link weghalen in $errstr.

Een tweede vraag zou zijn, ik heb de code getest in een stukje bij waar een bestand wordt geupload, met gelijk daarna een INSERT in de DB. Hoe kan ik testen of iets werkelijk ook ge-upload is? Het desbetreffende gedeelte ziet er zo uit:

1
2
3
4
5
6
7
8
9
10
11
if (is_uploaded_file($_FILES['inputImage']['tmp_name'])) {
               
   $last_id = mysql_insert_id();
   $imgnaam = "image_nieuws_" . $last_id . $extension; 
   $path = "/images/nieuws";
   move_uploaded_file($_FILES['inputImage']['tmp_name'], $path . "/" . $imgnaam);
                     
   $query = "INSERT INTO table(field_id, field_image_naam) VALUES ('" . $last_id . "','" . $imgnaam . "')";
   mysql_query($query);    
                  
   } else { //Error boodschap etc... }


Dus hoe kan ik zien of move_uploaded geslaagd is? En als laatste vraag: kan ik een zelfde soort functie maken voor MySQL errors?
Let's make life easy
Typo's are the demon spawn from hell !
pi_35018183
quote:
Op zondag 12 februari 2006 22:13 schreef SkaterSam het volgende:
Dus hoe kan ik zien of move_uploaded geslaagd is? En als laatste vraag: kan ik een zelfde soort functie maken voor MySQL errors?
move_uploaded_file() geeft false terug als er iets fout gaat (zoals je in de manual kan lezen )
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  zondag 12 februari 2006 @ 22:30:08 #109
65471 SkaterSam
Lurking Galore
pi_35018408
ja ik zag het al, dus had ik het veranderd in:

1
2
3
4
5
6
7
8
9
10
11
12
if (move_uploaded_file($_FILES['inputImage']['tmp_name'], $path . "/" . $imgnaam) == false) {
                     
   $_SESSION['add_error'] .= "<li>Kon het bestand niet verplaatsen</li>";
   header("Location: add.php");
   exit;
                     
} else {
                     
   $query = "INSERT INTO table(field_nieuws_id, field_image_naam) VALUES ('" . $last_id . "','" . $imgnaam . "')";
   mysql_query($query);    
                        
}


Maar hij redirect nog steeds naar de error pagina, en doet alsnog een INSERT...
Let's make life easy
Typo's are the demon spawn from hell !
pi_35019543
quote:
Op zondag 12 februari 2006 21:22 schreef mooya het volgende:

En register_globals is toch dat je een variabele kan ophalen zonder $_POST[] en $_GET[]?
Correct. En dat moet dus uit staan.
pi_35020486
quote:
Op zondag 12 februari 2006 21:55 schreef beerten het volgende:

[..]

De waarde van woonplaats zal ergens in je script geset moeten worden.
$woonplaats = $_POST['woonplaats'];
Als je dit bovenaan je script zet dan hoef je verder niets te veranderen. Staan er dan overal slashes omheen dan tik je
$woonplaats = stripslashes($_POST['woonplaats']);

Om verder getik in je script te voorkomen doe je het in een keer goed
$woonplaats = htmlspecialchars(stripslashes($_POST['woonplaats']));
functie:
1
2
3
 foreach($_POST as $key => $postval) {
         $_POST[$key] = stripslashes($postval);
      }


als ik $woonplaats = $_POST['woonplaats']; doe dan heeft hij wel de goede waarde (dus zonder slashes)
maar als ik $woonplaats = $woonplaats; doe dan staan er nog wel slashes in...
dus ik moet echt die $_POST var gebruiken... terwijl ik dat bijna nergens in de site gebruik...
moet ik nu de hele site aanpassen, of is er een andere oplossing?

ik ben er nu vanuit gegaan dat register globals aan staat en dat is ook zo, vandaar dat ik de variabele zonder $_POST of $_GET gebruik..
pi_35020727
quote:
Op zondag 12 februari 2006 23:17 schreef mooya het volgende:

[..]

moet ik nu de hele site aanpassen, of is er een andere oplossing?
Het beste is om de hele site aan te gaan passen naar gebruik van $_POST, $_GET, etc.

Je zult in PHP ongeveer op deze manier het beste werken (register_globals op Off!):
- Indien magic_quotes_gpc aanstaat, alle $_POST/$_GET/$_COOKIE-variabelen stripslashen
- Elke variabele benader je puur door $_POST['naam'] / $_GET['naam'] / etc
- Pas als je iets in de database gaat zetten gebruik je addslashes() om de query niet kapot te maken
- Pas als je iets in HTML-markup gaat zetten gebruik je htmlentities() of htmlspecialchars() om de waarden uit de database of uit een $_POST/$_GET/etc om te zetten

Dit is ongeacht de methode die je gebruikt; alhoewel je bij templates vaak ingebouwde functies hebt om een htmlentities() uit te voeren op een variabele. Verder moet je natuurlijk altijd de user input controleren en opletten dat je een query niet blootstelt aan SQL injection
pi_35020954
ok dan pas ik de boel aan
maar het beste is om pure html van een gebruiker op te slaan in je DB? en bij de output pas te htmlspecialcharren ?
pi_35021142
quote:
Op zondag 12 februari 2006 23:29 schreef mooya het volgende:
maar het beste is om pure html van een gebruiker op te slaan in je DB? en bij de output pas te htmlspecialcharren ?
Die HTML kan in je database absoluut geen kwaad, zolang je maar consequent bent met de manier waarop je die contents output dus je zou het op die manier kunnen doen ja.
  FOK!-Schrikkelbaas maandag 13 februari 2006 @ 11:20:08 #115
1972 Swetsenegger
Egocentrische Narcist
pi_35029849
quote:
Op zondag 12 februari 2006 16:49 schreef SuperRembo het volgende:
Is het misschien een oplossing om een multipart mail te sturen met een html en een plaint text versie?
IK vraag me nu trouwens af of dat de oplossing zal zijn. Immers wordt de mail niet verminkt of iets dergelijks. De helft van de informatie staat er simpelweg niet in.

Overigens zal ik me sowieso eens goed gaan verdiepen in de materie, maar vreemd is het wel

Aanvullende vraag. Maken mailclients van urls in een platte tekst mails klikbare links?
pi_35030448
quote:
Op maandag 13 februari 2006 11:20 schreef Swetsenegger het volgende:

[..]

Maken mailclients van urls in een platte tekst mails klikbare links?
Ligt aan de mailclient, maar in mijn geval (Mozilla Thunderbird) doet ie dat weldegelijk
pi_35036383
quote:
Op maandag 13 februari 2006 11:20 schreef Swetsenegger het volgende:

Aanvullende vraag. Maken mailclients van urls in een platte tekst mails klikbare links?
Ik heb nog geen gezien die dat niet doet. Gewoon wel in http://~~ formaat, en niet alleen www.~~
pi_35046120
-edit-
wtf nu werkt t wel...
pi_35048241
quote:
Op maandag 13 februari 2006 11:20 schreef Swetsenegger het volgende:

[..]

IK vraag me nu trouwens af of dat de oplossing zal zijn. Immers wordt de mail niet verminkt of iets dergelijks. De helft van de informatie staat er simpelweg niet in.

Overigens zal ik me sowieso eens goed gaan verdiepen in de materie, maar vreemd is het wel
Euh, wat je dus zegt is dat de klant een andere mail krijgt dan jij, terwijl jij gewoon een Cc (of Bcc) krijgt van wat er naar de klant wordt gestuurd?
  FOK!-Schrikkelbaas maandag 13 februari 2006 @ 19:36:15 #120
1972 Swetsenegger
Egocentrische Narcist
pi_35048703
quote:
Op maandag 13 februari 2006 19:25 schreef Light het volgende:

[..]

Euh, wat je dus zegt is dat de klant een andere mail krijgt dan jij, terwijl jij gewoon een Cc (of Bcc) krijgt van wat er naar de klant wordt gestuurd?
Precies.
Ik sta in de BCC en krijg tot op heden de mail binnen zoals ik hem ook daadwerkelijk bedoeld heb.
Sommige klanten krijgen dezelfde mail dus verminkt binnen. In zoverre, dat de data halverwege de mail gewoon verdwenen is. En andere klanten hebben hier en daar een vreemd teken in de mail (meestal een uitroepteken). In de body is dit niet zo erg, maar een ! in de bevestigingslink maakt het wat lastig

Kijk ik in de source van de mail welke ik in de BCC heb, ziet het er goed uit, zoals hier in bovenstaande code.

Ik ben er dus zeker van dat het om de interpretatie van een de mailclient gaat. De mail is immers door mijn php script goed verstuurd, anders zou ik 'm ook niet goed ontvangen.
Maar, vanadaag kwam ik via google op een ander topic hier op fok uit (http://forum.fok.nl/topic/812471/1/25 ) over iemand wiens mails simpelweg soms gewoon niet aankomen. Daar gaf iemand sowieso als opmerking dat de charset tussen quotes moet staan. En dat zie ik inderdaad ook in elke uitleg terug

Daarnaast sluit ik elke headerline met \r\n af. Nu is het een linux server, dus \n is misschien handiger? EN... last but not least, in bovenstaand topic, zag ik in ALLE voorbeelden dat ook de laatste headerline een \n heeft. Ik deed dat bij de laatste regel niet. Ik weet niet of iemand kan bevestigen dan wel ontkennen dat ook de laatste header regel een newline -moet- hebben?
pi_35052403
quote:
Op maandag 13 februari 2006 19:36 schreef Swetsenegger het volgende:

Daarnaast sluit ik elke headerline met \r\n af. Nu is het een linux server, dus \n is misschien handiger? EN... last but not least, in bovenstaand topic, zag ik in ALLE voorbeelden dat ook de laatste headerline een \n heeft. Ik deed dat bij de laatste regel niet. Ik weet niet of iemand kan bevestigen dan wel ontkennen dat ook de laatste header regel een newline -moet- hebben?
De mailheaders moeten worden afgesloten met \r\n, volgens de mailprotocollen. Servers kunnen ook alleen \n accepteren, maar da's geen onderdeel van het protocol. Dus ik zou gewoon \r\n gebruiken. Alleen weet ik zo even niet zeker of de laatste header ook met \r\n moet worden afgesloten.
  FOK!-Schrikkelbaas maandag 13 februari 2006 @ 20:51:21 #122
1972 Swetsenegger
Egocentrische Narcist
pi_35052691
quote:
Op maandag 13 februari 2006 20:46 schreef Light het volgende:

[..]

De mailheaders moeten worden afgesloten met \r\n, volgens de mailprotocollen. Servers kunnen ook alleen \n accepteren, maar da's geen onderdeel van het protocol. Dus ik zou gewoon \r\n gebruiken. Alleen weet ik zo even niet zeker of de laatste header ook met \r\n moet worden afgesloten.
Ik wist inderdaad dat tussen elke header regel een newline zit (ook een mooie manier om mailinjection af te vangen op je formuliertjes. alles met \n is een no-go)

Maar de laatste is dus ook voor mij onduidelijk
Anyway, ik heb van \rn eens \n gemaakt, de charset tussen quotes gezet en de laatste header regel met een newline afgesloten. Kijken wat het resultaat nu is.
pi_35052812
Swetsenegger, ik heb even de source code van PHP voor je doorgespit om dat over die headers op te zoeken. Zie het volgende:

1
2
3
4
5
6
7
8
9
(...)
      fprintf(sendmail, "To: %s\n", to);
      fprintf(sendmail, "Subject: %s\n", subject);
      if (headers != NULL) {
         fprintf(sendmail, "%s\n", headers);
      }
      fprintf(sendmail, "\n%s\n", message);
      ret = pclose(sendmail);
(...)

Zo te zien is het dus het slimst om géén \n (of \r\n) op het einde van je headers te plaatsen. Bron.
  FOK!-Schrikkelbaas maandag 13 februari 2006 @ 21:05:15 #124
1972 Swetsenegger
Egocentrische Narcist
pi_35053451
quote:
Op maandag 13 februari 2006 20:53 schreef JeRa het volgende:
Swetsenegger, ik heb even de source code van PHP voor je doorgespit om dat over die headers op te zoeken. Zie het volgende:
[ code verwijderd ]

Zo te zien is het dus het slimst om géén \n (of \r\n) op het einde van je headers te plaatsen. Bron.
Ok, zoals ik het had dus
Het enige 'foutje' zou dan het feit dat de charset niet tussen quotes stond kunnen zijn
pi_35053711
Maar welke mailclient gebruikt de persoon waarbij het fout gaat? Heb je al geprobeerd die mailclient te gebruiken en daarmee dat mailtje te ontvangen? Of heb ik ergens overheen gelezen?
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')