Hallo allemaal,

Ik maak heel mijn leven al gebruik van PHP maar ik heb er nooit voor geleerd en ben dit ook niet van plan aangezien het voor mij altijd een "bijproduct" is.

Ik ontwikkel namelijk applicaties voor Android en iOS. Ik gebruik dus PHP om gegevens in een database te zetten en te lezen.

Nu maak ik dus gebruik van de lelijke $_GET functie aangezien mijn app op deze manier gegevens kan verwerken en ontvangen.

Ik gebruik dit bijvoorbeeld om een comment system in mijn app te bouwen. Nu wil ik natuurlijk wel dat er geen misbruik van gemaakt kan worden. Daarom wil ik even voor de zekerheid checken of mijn code veilig voor gebruik is.

De code die ik momenteel gebruik:

<?php
header('Access-Control-Allow-Origin: *');

$mysqli = new mysqli("*", "*", "*", "*");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Error");
    exit();
}

$username = $_GET['username'];
$fbid = $_GET['fbid'];

function randomCode($length=8) {
   $characters = "23456789ABCDEFHJKLMNPRTVWXYZ";
   for ($p = 0; $p < $length; $p++) 
   {
       $string .= $characters[mt_rand(0, strlen($characters)-1)];
   }
   return $string;
}
$stmt = $mysqli->prepare("INSERT INTO users (fbid,name,discountcode) VALUES ('$fbid', '$username', '" . randomCode(8) . "')");

$stmt->bind_param("s", $username);
$stmt->bind_param("s", $fbid);

$stmt->execute();

printf ($mysqli->insert_id);

$stmt->close();

$mysqli->close();
?>


De code zelf werkt prima, maar ik wil er zeker van zijn dat dit ook veilig is.

Alvast erg bedankt.
Allard Keij op 11/02/2016 20:25:47

Ondanks dat heb ik helaas geen andere mogelijkheid dan mijn waarden door te geven via de link :(.

Je zou toch zeggen dat je ergens kan checken hoeveel variables er binnen komen?

Zoals in dit script hierboven mogen er maar 7 binnen komen. Mocht dit te checken zijn zou het opgelost zijn.

Mits er natuurlijk geen andere security issues ontstaan aangezien het feit blijft dat mensen kunnen typen wat ze willen als &comment=DIT HEB IK NIET IN BEHEER.



Je kan heel makkelijk kijken of er 7 waardes binnen komen.

count($_GET)

Maar dat kan dus alsnog vanalles zijn.


$getFields = array('factid','feedid','userid','avatarid','username','feedcat','comment');
foreach($getFields as $field)
  if(!isset($_GET[$field]))
    die('error');

Dit kijkt wel of al jouw gewenste 'gets' bestaan, maar doet ook niks :)

Zolang je &comment123123 niet gebruikt om in je database op te slaan, is daar niks mis mee hoor, zolang je de waardes SQL veilig maakt.
het heeft geen toegevoegde waarde, het gaat erom wat mensen in de door jouw opgegeven GET variables kan stoppen en wat jij ermee doet. Het preparen van de waardes doet al heel veel.

Probeer om restricties te maken ook, als je een getal verwacht, controlleer of het een getal is met if(ctype_digit($variable)) enz.

Reageren