[PHP]user input beperken

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Bij wijze van beginnetje in de wondere wereld van php/mysql heb ik aan de hand van een aantal (dreamweaver) tutorials voor mezelf een soort blog-achtige site gemaakt. Dat is tot nu toe redelijk gelukt. Het enige probleem wat ik nu heb betreft het punt van reacties op berichten, wat toch wel een essentieel onderdeel van een dergelijke site is ;)

In die tutorials tonen ze me hoe ik een form voor het plaatsen van reacties maak (zo'n standaard dreamweaver record insertion ding, zal vast niet ideaal zijn maar het werkt). Dat lukt allemaal wel, alleen is er totaal geen beperking op wat voor html/php/js iemand kan plaatsen en dat lijkt me niet zo'n goed idee. Nu ben ik wat aan het zoeken geweest en kom wel uit op op zoiets als strip_tags() maar dan lees ik weer zoiets als dit en dan lijkt dat weer niet afdoend. Ik vraag me dus af wat jullie zoal gebruiken voor dit 'probleem'. Ik heb ook al wat in de bestanden van wordpress en serendipity gekeken maar daar werd ik niet veel wijzer van.

(oja, ik heb ook geen idee hoe ik een filter zoals dat van cal henderson op mijn form toepas maar dat zal wel teveel gevraagd zijn)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Wat is nu concreet je vraag? :) Je wilt oplossingen tegen XSS en SQL Injection attacks? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Naatan
  • Registratie: September 2006
  • Laatst online: 05-05-2010

Naatan

Systeem Beheerder

Probeer htmlspecialchars eens, dit zorgt ervoor dat de HTML die zich in de string bevind simpelweg converted word naar een string die enkel text zal weergeven zou je hem ergens op je pagina plaatsen.

Naatan.com - Blog & Wordpress Plugins | Divia-CMS.com (OpenSource) - Currently Recruiting!


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik doe eigenlijk altijd het volgende:
Bij het opslaan
• magic quotes uit (of stripslashes).
• sprintf() gebruiken bij het opmaken van de query (zodat alles als het verwachte type in de query komt)
• mysql_real_escape_string() toepassen op string velden

Bij het weergeven:
• htmlspecialchars over de ingevoerde text

Verder natuurlijk altijd input checken op verwachte waarden. Maar hoe je dat doet hangt nogal af van wat er gepost moet worden...

Regeren is vooruitschuiven


Verwijderd

Topicstarter
Heb de faq idd gelezen :)
gorgi_19 schreef op donderdag 21 september 2006 @ 10:26:
Wat is nu concreet je vraag? :) Je wilt oplossingen tegen XSS en SQL Injection attacks? :)
Ik probeerde het wat breed te houden zodat ik naar aanleiding van de replys wat meer richting krijg om te zoeken. Zelf had ik al gekeken htmlspecialchars/striptags/htmlentities.

Mijn concrete probleem zal naar GoT/PRG standaarden waarschijnlijk te simpel/noobie zijn om antwoord op te verwachten. Maar goed laat ik het dan toch maar proberen. Wat ik wil bereiken is dat een bezoeker een comment kan geven op een blogpost en dat hij daarbij alleen een aantal vooraf bepaalde html tags kan gebruiken, zoals bv. strong, em en blockquote. De rest van html/php/js moet als het ware gestript worden voordat de comment in de database wordt opgeslagen. Nou leek dat filter van cal henderson me wel wat maar misschien is dat wat overkill. Tevens heb ik geen idee hoe ik dat filter precies toepas. De door dw gegenereerde code is voor mij wat wazig, misschien dat ik er beter aan doe dat (proberen) te herschrijven.
PHP:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  $insertSQL = sprintf("INSERT INTO blg_comments_com (name, comment, `date`, id_art_comment) VALUES (%s, %s, %s, %s)",
                       GetSQLValueString($_POST['name'], "text"),
                       GetSQLValueString($_POST['comment'], "text"),
                       GetSQLValueString($_POST['date'], "date"),
                       GetSQLValueString($_POST['id_art_comment'], "int"));

  mysql_select_db($database_connBlog, $connBlog);
  $Result1 = mysql_query($insertSQL, $connBlog) or die(mysql_error());

  $insertGoTo = "article.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
       <form method="post" name="form2" action="<?php echo $editFormAction; ?>">
         <table id="reactieform" width="100%" align="center">
           <tr valign="baseline">
             <td nowrap align="right" valign="top">Naam:</td>
             <td><input name="name" type="text" value="" size="36" maxlength="30" />
             </td>
           </tr>
           <tr valign="baseline">
             <td align="right" valign="top" nowrap>Bericht:</td>
             <td><textarea name="comment" cols="40" rows="10"></textarea></td>
           </tr>
           <tr valign="baseline">
             <td nowrap align="right">&nbsp;</td>
             <td><input type="submit" value="plaats"></td>
           </tr>
         </table>
         <input type="hidden" name="date" value="<?php echo date('Y-m-d H:i:s'); ?>">
         <input type="hidden" name="id_art_comment" value="<?php echo $row_rsArticles['id_art']; ?>">
         <input type="hidden" name="MM_insert" value="form2">
       </form>

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 21 september 2006 @ 14:44:
Wat ik wil bereiken is dat een bezoeker een comment kan geven op een blogpost en dat hij daarbij alleen een aantal vooraf bepaalde html tags kan gebruiken, zoals bv. strong, em en blockquote. De rest van html/php/js moet als het ware gestript worden voordat de comment in de database wordt opgeslagen.
http://nl2.php.net/strip_tags? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ja had hem gezien, maar op daar staat ook vrij duidelijk een waarschuwing bij dat attributes in tags die je wel toestaat open staan voor misbruik. Vandaar dat mijn voorkeur naar zoiets als dat filter waar ik naartoe link Wat ik nu nog moet weten is hoe je dat toepast op mijn huidige pagina maar die vraag zal wel te basic zijn denk ik.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Domweg alle door users geplaatste attributen strippen uit alle tags die door strip_tags heen komen lijkt me voldoende? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1