Waarom $_SERVER[‘PHP_SELF’] gebruiken in plaats van

In een formulier op een PHP-pagina kunt u het volgende gebruiken:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>

of

<form action="#" ...>

of

<form action="" ...>

in het actiekenmerk van het formulier. Aangezien echo $_SERVER['PHP_SELF'] geen variabelen doorgeeft voor het gebruik van GET en je "" moet gebruiken, waarom zou je dat dan gebruiken? of "#"?

Ik vraag het omdat het me even heeft gekost om erachter te komen dat de variabelen niet worden doorgegeven met $_SERVER['PHP_SELF']. Bedankt.


Antwoord 1, autoriteit 100%

Het kenmerk action wordt standaard ingesteld op de huidige URL. Het is de meest betrouwbare en gemakkelijkste manier om te zeggen “verzend het formulier naar dezelfde plaats waar het vandaan kwam”.

Er is geen reden om $_SERVER['PHP_SELF'] te gebruiken, en # verzendt het formulier helemaal niet (tenzij er een submit event handler bijgevoegd die de indiening afhandelt).


Antwoord 2, autoriteit 72%

Het gebruik van een lege string is prima en eigenlijk veel veiliger dan gewoon $_SERVER['PHP_SELF'] te gebruiken.

Bij gebruik van $_SERVER['PHP_SELF'] is het heel eenvoudig om kwaadaardige gegevens te injecteren door simpelweg /<script>... toe te voegen na de whatever.php deel van de URL, dus u moet deze methode niet gebruiken en stoppen met het gebruik van PHP-tutorials die dit suggereren.


Antwoord 3, autoriteit 39%

Als je ANY variabele in HTML invoegt, kun je het beste htmlspecialchars() gebruiken, tenzij je wilt dat de browser de variabele zelf interpreteert als HTML. Het voorkomt onder andere dat hackers willekeurige HTML in uw pagina invoegen.

De waarde van $_SERVER['PHP_SELF'] wordt rechtstreeks overgenomen van de URL die in de browser is ingevoerd. Als u het dus gebruikt zonder htmlspecialchars(), staat u hackers toe de uitvoer van uw code rechtstreeks te manipuleren.

Als ik u bijvoorbeeld een link e-mail naar http://example.com/"><script>malicious_code_here()</script><span class=" en je hebt <form action="<?php echo $_SERVER['PHP_SELF'] ?>">, de output zal zijn:

<form action="http://example.com/"><script>malicious_code_here()</script><span class="">

Mijn script zal worden uitgevoerd en u zult er niet wijzer van worden. Als je was ingelogd, heb ik mogelijk je cookies gestolen of vertrouwelijke informatie van je pagina geschraapt.

Als u echter <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>"> zou gebruiken, zou de uitvoer zijn:

<form action="http://example.com/&quot;&gt;&lt;script&gt;cookie_stealing_code()&lt;/script&gt;&lt;span class=&quot;">

Toen je het formulier indiende, had je een rare URL, maar mijn kwaadaardige script werkte tenminste niet.

Aan de andere kant, als je <form action=""> gebruikte, zou de output hetzelfde zijn, ongeacht wat ik aan mijn link heb toegevoegd. Dit is de optie die ik zou aanraden.


Antwoord 4, autoriteit 17%

Ik weet dat de vraag twee jaar oud is, maar het was het eerste resultaat van wat ik zocht.
Ik heb goede antwoorden gevonden en ik hoop dat ik andere gebruikers kan helpen.

Kijk hier eens naar

Ik zal het kort houden:

  • gebruik de $_SERVER["PHP_SELF"] Variabele met htmlspecialchars():

    `htmlspecialchars($_SERVER["PHP_SELF"]);`
    
  • PHP_SELF retourneert de bestandsnaam van het script dat momenteel wordt uitgevoerd.

  • De functie htmlspecialchars() converteert speciale tekens naar HTML-entiteiten.
    –> GEEN XSS

Antwoord 5

Naast de bovenstaande antwoorden, is een andere manier om dit te doen $_SERVER['PHP_SELF'] of door simpelweg een lege tekenreeks te gebruiken, is __DIR__ te gebruiken.
OF
Als u een lagere PHP-versie (<5.3) gebruikt, is een gebruikelijker alternatief het gebruik van dirname(__FILE__)
Beide retourneert de mapnaam van het bestand in context.

BEWERKEN
Zoals Boann opmerkte dat dit de locatie op de schijf van het bestand retourneert. Die je idealiter niet als url zou blootleggen. In dat geval kan dirname($_SERVER['PHP_SELF']) de mapnaam van het bestand in context teruggeven.


Antwoord 6

Er is geen verschil. De $_SERVER[‘PHP_SELF’] maakt de uitvoeringstijd gewoon 0.000001 seconde langzamer.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

2 × 1 =

Other episodes