Avatar billede wampiro-uha Nybegynder
15. januar 2004 - 15:08 Der er 10 kommentarer og
1 løsning

Tjek at inddata er fra korrekt server!

Jeg har en formular med en masse data som skal udfyldes.
Når det så trykkes på submit sendes disse data til en ny side hvor de smækkes i en database osv.

Det jeg nu vil er at tjekke at dataerne kommer fra den formular som findes på min side, og ikke en som en eller anden "hacker" selv har lavet således at dataerne kan udfyldes med ting jeg ikke vil have.

Så det jeg vil er at tjekke om dataerne altså kommer fra min egen server eller noget ala det.

Hvordan gøres dette nemmest og bedst?

Og hvordan kan jeg tjekke at brugeren har slået javascript til?

Grunden til min forsigtighed er at det omhandler penge bl.a...
Avatar billede mufoxe Nybegynder
15. januar 2004 - 15:11 #1
Du kører sikkert op imod en eller anden betalingsgateway. De stiller ofte (altid?) funktionalitet til rådighed, som du kan bruge til at kontrollere om en given transaktion er i orden eller ej. Jeg vil råde dig til at bruge deres funktionalitet frem for din egen, da du så kan bonge dem, hvis noget går galt hos dig.
Avatar billede codebase Praktikant
15. januar 2004 - 15:15 #2
du kender $HTTP_REFERER
Avatar billede zkn Nybegynder
15. januar 2004 - 15:18 #3
$HTTP_REFERER er IKKE sikker den sættes af browseren og kan manipuleres.
Avatar billede wampiro-uha Nybegynder
15. januar 2004 - 15:46 #4
Det er ikke kun med hensyn til en betalingsgateway. Men det er rigtig at de stiller sikkerheden!

Men jeg søger sikkerheden til andre næsten ligeså vigtige ting.
Og jo, jeg kender $HTTP_REFERER, men som zkn også siger så er det ikke sikkert!

Så jeg søger stadig en slags sikkerhed, samt at tjekke for om brugeren har slået javascript til og at mine javascripts er 100% understøttet hos brugeren.
Avatar billede mufoxe Nybegynder
15. januar 2004 - 15:52 #5
En anden ting vedr. javscript. Jeg ville aldrig gøre brug af javascript til at sikre pengetransaktioner. Der er simpelthen for mange variable til at det er en god idé. Hellere tage en tur mere tilbage til serveren, hvor man selv har 100% kontrol over tingene. Det er selvfølgelig bare min mening om den sag :)
Avatar billede coderdk Praktikant
15. januar 2004 - 16:46 #6
En måde at validere data på er at sende en kontrolkode med over...
Lad mig give et eksempel: Du har to felter, fornavn og efternavn - $fn og $en. Hvis du vil være sikker på at de har været igennem din server først (du skal altså submitte til din egen server) $valideringsnoegle = md5(md5($fn.$en).'en hemmelig streng');
Nu kan du på den anden server være sikker på at der ikke har været pillet ved data ved blot at checke om validerinsnøglen er den samme - altså i stil med:

if ($_GET['validationkey'] == md5(md5($_GET['fn'].$_GET['en']).'en hemmelig streng'))
{
  // data er valide
}

Vær forsigtig med at bruge javascript til vigtige ting. Men hvis du vil være sikker på om folk har javascript enablet kan du evt gøre følgende.
På hver side require_once('test_js.php');
test_js.php indeholder noget lignende:

session_start();

if (!isset($_SESSION['js_testet']))
{
  // Test for javascript
  $_SESSION['js_testet'] = 1;
  echo "<script>document.location.href = '" . __FILE__ . "?" . $_SERVER['QUERY_STRING'] . "&has_js=1';</script>";
}
else {
  // Der er blevet testet
  if ($_SESSION['js_testet'] != '2')
  {
    // Hvis vi kommer herind er javascript ikke understøttet
    // eller også er testen ikke helt gennemført
    if ($_SESSION['$_GET['has_js'] != '1')
    {
      // Test gennemført - Brugeren har IKKE js enablet
    }
    else
    {
      // Test gennemført - Brugeren har javascript!
      $_SESSION['js_testet'] = 2;
    }
  }
}

:)
Avatar billede wampiro-uha Nybegynder
17. januar 2004 - 12:58 #7
Det med at sende en "hemmelig" streng med kaldet er faktisk en god idé.

Men findes der ikke en måde hvorpå jeg kan sende strengen med over uden at brugeren kan se hvad den er?

Jeg mener når man sender med POST eller GET så kan brugeren jo se hvad det er, og forholdvis let bryde det?
Avatar billede coderdk Praktikant
17. januar 2004 - 23:39 #8
Jo han vil altid kunne se "kontrolkoden", men han vil ikke kunne ændre nogle af felterne, da koden så ikke længere vil passe - Han kan ikke bryde den (det er i hvert tilfælde svært), da han skal vide præcis hvordan den er lavet - i vores tilfælde en md5-hash af felterne, denne hash sammensat med en hemmelig streng (denne streng skal kun du kende - på scriptet der sender, og det der modtager - dette er så også md5-hash'et - Det er MEGET svært at bryde. Det er samme princip som ArchiTrade / DIBS (betalingssystem) laver deres kontrolkoder!
Avatar billede wampiro-uha Nybegynder
18. januar 2004 - 16:21 #9
kan du så ikke komme med et eksempel på en form (siden dataerne kommer fra)
og siden som skal modtage dataerne?

For jeg kan ikke helt lure det ud fra det du er kommet med!
Avatar billede coderdk Praktikant
18. januar 2004 - 20:00 #10
Ja du er nødt til på din form at POST/GET'e til den samme server for at kunne lave kontrolkoden! Når den så er lavet kan du smide dataene videre til din anden server.
Din side du submit'er til kunne indeholde:

<?php

  $kode = md5(md5($_POST['felt1'].$_POST['felt2']).'hemmelig streng');
  header('location: http://server2/script2.php?felt1='.$_POST['felt1'].'&felt2='.$_POST['felt2'].'&kode='.$kode);

?>

Her bliver data sendt videre med GET variable...

På server2 skal script2 så indeholde:

<?php

  if ($_GET['kode'] != md5(md5($_GET['felt1'].$_GET['felt2']).'hemmelig streng'))
  {
    die('Koden passer ikke!');
  }

?>
Avatar billede wampiro-uha Nybegynder
19. januar 2004 - 17:09 #11
Jeg siger mange 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
Vi tilbyder markedets bedste kurser inden for webudvikling

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