PHP check in form
Op dit moment kunnen mensen PHP dingen invoeren die schadelijk zijn. Ik wil dit graag oplossen door een check te maken, dus als er PHP tags worden ingevoerd returnt het een error. Iemand een oplossing? Heb geprobeerd te zoeken, maar vond niet echt iets, ook zijn er nog meer dingen die ik moet blokkeren?
Gewijzigd op 01/01/2012 20:19:20 door Jurrien P
En hoe kan een gebruiker PHP dingen uitvoeren? En waarom kan een gebruiker dit doen?
En mocht je het zelf uit willen zoeken, gebruik preg_match en leer dan wel even Regexen.
Misschien iets qua code en uitleg waar het ingodsnaam over gaat?
Even tussen de regels doorlezen
Er wordt bedoeld:
- er mogen geen php scripts / code gepost worden
- er mag geen hmtl gepost worden
- er mag geen js code gepost worden
- er mag geen sql injectie gedaan worden
enz..
Ik heb gewoon simpele velden gemaakt die naar de database gaan. Maar ik wil niet hebben dat er PHP, HTML, JS in mijn velden kunnen. Dat moet toch gewoon kunnen met een simpele if statement?
Als ik zo hoor heb je al voldoende aan htmlspecialchars()
htmlspecialchars, dat houdt het niet tegen, dat zet alleen wat om
Noppes Homeland op 01/01/2012 21:49:05:
htmlspecialchars, dat houdt het niet tegen, dat zet alleen wat om
Maar het houdt de uitvoer wel tegen, doordat de tekens om worden gezet naar entities.
Ja, maar daar gaat dit topic niet om. Het gaat om de detectie van, als dat in een $_POST/$_GET voorkomt, dat er een "blokkade" optreed.
Wat zijn php-tags?
<?php en ?>
- Aar - op 02/01/2012 12:33:08:
<?php en ?>
of <? en ?> óf <% en %>
Kun je dit niet gebruiken?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
function validInput($input)
{
if (strip_tags($input) != str_replace("\0", '', $input))// strip_tags haalt ook 0-bytes weg.
return false;
return true;
}
function validInput($input)
{
if (strip_tags($input) != str_replace("\0", '', $input))// strip_tags haalt ook 0-bytes weg.
return false;
return true;
}
Wat jij moet doen, is goed beseffen welk wapen je gebruikt tegen welke vijand.
Om te beginnen: escapen moet je sowieso doen.
escapen beschermt je tegen SQL injection, maar zorgt er bv. ook voor dat het woord foto's (het gaat om de ' ) goed wordt behandeld.
Iemand die het woord foto's post, heeft geen kwade bedoelingen, maar toch moet je je er tegen beschermen.
Wat je eventueel wel kan doen, is controleren op de aanwezigheid van HTML tags, en daar op blokkeren.
Zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// ...
// controleren op html tags (en dus ook javascript, want die moeten tussen <script></script> staan om actief te zijn)
if($_POST['my_text'] != strip_tags($_POST['my_text'])) {
$error = 'Je mag geen html tags posten';
echo $error;
}
else {
// geen html tags gevonden. Deze tekst mag je in je db steken
$my_text = mysql_escape_string($_POST['my_text']); // zie ook mysql_real_escape_string()
$sql = "INSERT INTO mijn_tabel (mijn_tekst, ...) VALUES ('" . $my_text . "', ...)";
// ...
echo $my_text;
}
// ...
?>
// ...
// controleren op html tags (en dus ook javascript, want die moeten tussen <script></script> staan om actief te zijn)
if($_POST['my_text'] != strip_tags($_POST['my_text'])) {
$error = 'Je mag geen html tags posten';
echo $error;
}
else {
// geen html tags gevonden. Deze tekst mag je in je db steken
$my_text = mysql_escape_string($_POST['my_text']); // zie ook mysql_real_escape_string()
$sql = "INSERT INTO mijn_tabel (mijn_tekst, ...) VALUES ('" . $my_text . "', ...)";
// ...
echo $my_text;
}
// ...
?>
Wat de php tags bevat: eventueel filter je die ook weg; hoewel ... je moet al serieus slecht bezig zijn als php code wordt uitgevoerd omwille van de content van een post.
strip_tags verwijderd ook PHP-tags
Twee vliegen in één klap :)