Avatar billede budolfsen Nybegynder
01. september 2006 - 11:12 Der er 6 kommentarer

Mysql problemer

Hej

Jeg har opdaget at mine databser bliver fyldt op med ting som ikke hører til - især webadresser på pornosider.

Kan man på nogen måde sørge for, at det som skrives i databsen er reelt og ikke bare noget lort.

Jeg håber på hjælp...?
Avatar billede fennec Nybegynder
01. september 2006 - 11:51 #1
Data bliver vel sat ind gemmen et program du har lavet. Det er i dette program du skal tjekke dine data inden de indsættes.
Avatar billede mcgoat Nybegynder
01. september 2006 - 11:53 #2
vil gætte på du har en gæstebog/tilmelding/ eller andet på en hjemmeside hvor folk kan skrive noget der bliver gemt i databasen? Hvis det er en hjemmeside, må vi så se dit script der gemmer i db?
Avatar billede budolfsen Nybegynder
01. september 2006 - 12:13 #3
Ja det er korrekt mcgoat - jeg har en gæstebog på min side.

og her er scriptet jeg har bruger
<?php require_once('../Connections/guestbook.php'); ?>
<?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"] == "sign_guestbook")) {
  $insertSQL = sprintf("INSERT INTO guestbook (navn, email, tekst, dato) VALUES (%s, %s, %s, %s)",
                      GetSQLValueString($_POST['navn'], "text"),
                      GetSQLValueString($_POST['email'], "text"),
                      GetSQLValueString($_POST['tekst'], "text"),
                      GetSQLValueString($_POST['dato'], "date"));

  mysql_select_db($database_guestbook, $guestbook);
  $Result1 = mysql_query($insertSQL, $guestbook) or die(mysql_error());

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

$colname_rsDato = "1";
if (isset($_GET['dato'])) {
  $colname_rsDato = (get_magic_quotes_gpc()) ? $_GET['dato'] : addslashes($_GET['dato']);
}
mysql_select_db($database_guestbook, $guestbook);
$query_rsDato = sprintf("SELECT dato FROM guestbook WHERE dato = '%s'", $colname_rsDato);
$rsDato = mysql_query($query_rsDato, $guestbook) or die(mysql_error());
$row_rsDato = mysql_fetch_assoc($rsDato);
$totalRows_rsDato = mysql_num_rows($rsDato);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>

<body>
<form action="<?php echo $editFormAction; ?>" method="POST" name="sign_guestbook" id="sign_guestbook">
  <table width="400" border="0" cellpadding="2" cellspacing="2" class="layout">
    <tr class="top">
      <td colspan="2">&nbsp;</td>
    </tr>
    <tr valign="top">
      <td>Navn:</td>
      <td><input name="navn" type="text" id="navn" size="50"></td>
    </tr>
    <tr valign="top">
      <td>Email:</td>
      <td><input name="email" type="text" id="email" size="50"></td>
    </tr>
    <tr valign="top">
      <td>Hilsen:</td>
      <td><textarea name="tekst" cols="50" rows="7" id="tekst"></textarea></td>
    </tr>
    <tr valign="top">
      <td>&nbsp;</td>
      <td><input name="dato" type="hidden" id="dato" value="<?php echo $row_rsDato['dato']; ?>"></td>
    </tr>
    <tr>
      <td class="bottom">&nbsp;</td>
      <td class="bottom"><input type="submit" name="Submit" value="Skriv i g&aelig;stebog"></td>
    </tr>
  </table>
  <p>&nbsp;</p>
  <input type="hidden" name="MM_insert" value="sign_guestbook">
</form>
</body>
</html>
<?php
mysql_free_result($rsDato);
?>
Avatar billede mcgoat Nybegynder
01. september 2006 - 12:36 #4
du kunne f.eks lave et array der indeholder "viagra", "sex", "xxx", "porn" osv osv. og så tjekke alle dine $_POST's for at se om de indeholder nogle af de ord der er i dit array. Hvis der er, så bliver beskeden ikke postet, og brugeren får en fejl
Avatar billede budolfsen Nybegynder
01. september 2006 - 16:56 #5
Kan nedenstående bruges eller hvordan ville du lave det.

$forbudteordarray = array("østers","fisk","feta","nuser","foo","bar");
/*her flader vi arrayet ovenover ud, og laver den om til noget som
kan bruges i en MySQL forespørgsel*/
$flad = " %" . implode("% OR %", $forbudteordarray) . "% ";
/*ovenstående skulle tilføje % i hver ende af hvert ord
og OR in mellem hver af ordene.*/

//forespørgsel med vores flade array
$foresp = "SELECT * FROM posttabel WHERE tekst != '$flad'";
//send forspørgslen
$resultat = mysql_query($foresp);
//loop så længe der er et resultat
while ($raekke = mysql_fetch_assoc($resultat) {
//vis hvad der skal vises
echo "<b>$raekke 'titel'</b><br />$raekke 'tekst'<br /><br />";
//...osv
}
Avatar billede budolfsen Nybegynder
02. september 2006 - 22:57 #6
Jeg har siddet og kigget lidt rundt omkring på nettet for at se, om der er andre der har oplevet at blive spammet på denne måde og jeg kan ikke finde noget om det.

Mcgoat - tak for ideen med arrayet, men det som undrer mig er, at det først er kommet indenfor det sidste år, hvor jeg opgraderede til Mittel Server 7,0, så jeg tror det enten har noget med CHMOD af mysql at gøre eller evt. hvordan privilegerne er givet til Mysql.

Jeg har også et forum, som ligeledes er blevet spammet men kun i en enkelt tråd.

Jeg kan simpelthen ikke forstå/finde ud af hvad der er galt.

Jeg håber at der findes nogle som selv har prøvet det.

På forhånd tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester