Vervanger van Base64

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Johan de wit

johan de wit

28/06/2015 21:08:33
Quote Anchor link
Base64 is de enige die goed is voor ID vervangen/verbergen, let op ik gebruik dit niet voor wachtwoorden:

Voordelen van Base64:
- Je hebt alleen Cijfers met (Hoofd)letters.
- Encode en decode is handig.

Wat is echt een goed vervanger van Base64?

- Ik wil dat geen punt of slash in url komt te staan.
- Encode en decode is noodzakelijk.
Gewijzigd op 28/06/2015 21:09:10 door Johan de wit
 
PHP hulp

PHP hulp

11/12/2024 22:27:13
 
Eddy E

Eddy E

28/06/2015 21:16:31
Quote Anchor link
Wat is er mis met base64_encode() en base64_decode()?


Toevoeging op 28/06/2015 21:19:03:

convert_uuencode() is een mogelijkheid?
 
Johan de wit

johan de wit

28/06/2015 23:54:36
Quote Anchor link
Bij elke website kan je Base64 decoderen.
 
Ozzie PHP

Ozzie PHP

29/06/2015 10:10:20
Quote Anchor link
>> Bij elke website kan je Base64 decoderen.

Dus is het niet de juiste manier als je een url echt wilt "verbergen". Je kunt door te decoden immers het origineel weer tevoorschijn halen. Maar andere vraag. Waarom wil je een "ID vervangen/verbergen"? Wat is er zo geheim aan een ID?

Als je toch zoiets wil doen (maar misschien kun je beter even uitleggen wat je precies wilt) dan lijkt hashing me een logischere optie.
 
Ivo P

Ivo P

29/06/2015 10:18:48
Quote Anchor link
Als het gaat om: "ik zie mijn settings via /account.php?id=1234", omdat ik user 1234 ben, en jij wilt voorkomen dat ik via /account.php?id=1233 de settings van een ander zie, dan ben je op de verkeerde weg.

Weliswaar zal iemand vanuit id=MTIzNA== niet snel zien dat dat voor 1234 staat, maar als hij dat wel doorheeft, kan hij vervolgens alsnog bij alle accounts.
 
Bart V B

Bart V B

29/06/2015 10:46:25
Quote Anchor link
Is het misschien een hele rare suggestie om geen GET te gebruiken maar om een session te gebruiken?
Dan hoef je allemaal geen coderingen te gebruiken.
 
Marthijn Buijs

Marthijn Buijs

29/06/2015 11:23:50
Quote Anchor link
Sessies kunnen achterhaald worden dus ik zou wel een beveiliging gebruiken.
Gewijzigd op 29/06/2015 11:24:24 door Marthijn Buijs
 
Johan de wit

johan de wit

29/06/2015 11:33:45
Quote Anchor link
Ivo P op 29/06/2015 10:18:48:
Als het gaat om: "ik zie mijn settings via /account.php?id=1234", omdat ik user 1234 ben, en jij wilt voorkomen dat ik via /account.php?id=1233 de settings van een ander zie, dan ben je op de verkeerde weg.

Weliswaar zal iemand vanuit id=MTIzNA== niet snel zien dat dat voor 1234 staat, maar als hij dat wel doorheeft, kan hij vervolgens alsnog bij alle accounts.


Account.php?id=1234 is opgelost dus iedereen kan alleen zijn eigen profiel aanpassen, nu wil ik de volgende stap nemen en daar had ik een topic voor geopend maar helaas alles is door elkaar gegaan dat er geen oplossing is gevonden.

Ik heb een pagina met links op staan dus een overzicht. Na inloggen kan je items uploaden (uploaden is er nog niet) en elke moment kan je via bewerk pagina aanpassen.

Wat nu vervelende aan is als je in url balk item=1234 hebt staan, dan kan je dit ook naar item=12345678890 veranderen en vervolgens aanpassen.

Item wat door jou is geupload mag niemand anders dan jij zelf aanpassen.


Toevoeging op 29/06/2015 11:34:33:

PHP Maarten op 29/06/2015 11:23:50:
Sessies kunnen achterhaald worden dus ik zou wel een beveiliging gebruiken.


Wou ik net gaan zeggen.

Toevoeging op 29/06/2015 11:35:51:

Ozzie PHP op 29/06/2015 10:10:20:
>> Bij elke website kan je Base64 decoderen.

Dus is het niet de juiste manier als je een url echt wilt "verbergen". Je kunt door te decoden immers het origineel weer tevoorschijn halen. Maar andere vraag. Waarom wil je een "ID vervangen/verbergen"? Wat is er zo geheim aan een ID?

Als je toch zoiets wil doen (maar misschien kun je beter even uitleggen wat je precies wilt) dan lijkt hashing me een logischere optie.


Je antwoord staat bovenaan. :)
 
Randy vsf

Randy vsf

29/06/2015 11:41:37
Quote Anchor link
En als iemand doorheeft dat de id's maar "gemaskeerd" zijn.
Dan kan je het hele systeem gaan aanpassen, omdat er iemand van alles doet wat hij niet hoort te doen.

Beter doe je nog een controle erachter, om te kijken of het wel echt die gebruiker is.

Quote:
Sessies kunnen achterhaald worden dus ik zou wel een beveiliging gebruiken.


Wou ik net gaan zeggen.


Op de manier hoe je nu ID's probeert te verbergen, is makkelijker te achterhalen dan sessies.

Quote:
Item wat door jou is geupload mag niemand anders dan jij zelf aanpassen.


sessies
Gewijzigd op 29/06/2015 11:43:46 door Randy vsf
 
Johan de wit

johan de wit

29/06/2015 11:44:11
Quote Anchor link
Randy Flujowa op 29/06/2015 11:41:37:
En als iemand doorheeft dat de id's maar "gemaskeerd" zijn.
Dan kan je het hele systeem gaan aanpassen, omdat er iemand van alles doet wat hij niet hoort te doen.

Beter doe je nog een controle erachter, om te kijken of het wel echt die gebruiker is.


Hier kwamen wij niet uit, dan heb je geen keus en dan moet je door zoeken naar een andere oplossing.

Toevoeging op 29/06/2015 11:46:29:

Randy Flujowa op 29/06/2015 11:41:37:
En als iemand doorheeft dat de id's maar "gemaskeerd" zijn.
Dan kan je het hele systeem gaan aanpassen, omdat er iemand van alles doet wat hij niet hoort te doen.

Beter doe je nog een controle erachter, om te kijken of het wel echt die gebruiker is.

Quote:
Sessies kunnen achterhaald worden dus ik zou wel een beveiliging gebruiken.


Wou ik net gaan zeggen.


Op de manier hoe je nu ID's probeert te verbergen, is makkelijker te achterhalen dan sessies.

Quote:
Item wat door jou is geupload mag niemand anders dan jij zelf aanpassen.


sessies

Zal ik doorverwijzen naar mij topic of kan ik beter script nogmaals plaatsen?
 
Marthijn Buijs

Marthijn Buijs

29/06/2015 11:47:44
Quote Anchor link
Je moet in je achterhoofd houden dat gebruikers van je website nooit te vertrouwen zijn en dus de nodige beveiliging moet hebben.

Quote:
En als iemand doorheeft dat de id's maar "gemaskeerd" zijn.
Dan kan je het hele systeem gaan aanpassen, omdat er iemand van alles doet wat hij niet hoort te doen.
 
Johan de wit

johan de wit

29/06/2015 11:54:10
Quote Anchor link
PHP Maarten op 29/06/2015 11:47:44:
Je moet in je achterhoofd houden dat gebruikers van je website nooit te vertrouwen zijn en dus de nodige beveiliging moet hebben.

Quote:
En als iemand doorheeft dat de id's maar "gemaskeerd" zijn.
Dan kan je het hele systeem gaan aanpassen, omdat er iemand van alles doet wat hij niet hoort te doen.


Als je niet uit kan komen.
 
Randy vsf

Randy vsf

29/06/2015 13:08:04
Quote Anchor link
Johan de wit op 29/06/2015 11:54:10:
PHP Maarten op 29/06/2015 11:47:44:
Je moet in je achterhoofd houden dat gebruikers van je website nooit te vertrouwen zijn en dus de nodige beveiliging moet hebben.

Quote:
En als iemand doorheeft dat de id's maar "gemaskeerd" zijn.
Dan kan je het hele systeem gaan aanpassen, omdat er iemand van alles doet wat hij niet hoort te doen.


Als je niet uit kan komen.




Overal is een oplossing voor.
Een gebruiker kan op deze manier zelfs het admin account overnemen :) .
 
Ozzie PHP

Ozzie PHP

29/06/2015 13:13:00
Quote Anchor link
Bart V B op 29/06/2015 10:46:25:
Is het misschien een hele rare suggestie om geen GET te gebruiken maar om een session te gebruiken?
Dan hoef je allemaal geen coderingen te gebruiken.

PHP Maarten op 29/06/2015 11:23:50:
Sessies kunnen achterhaald worden dus ik zou wel een beveiliging gebruiken.

Johan de wit op 29/06/2015 11:33:45:
PHP Maarten op 29/06/2015 11:23:50:
Sessies kunnen achterhaald worden dus ik zou wel een beveiliging gebruiken.


Wou ik net gaan zeggen.

Toch weer een beetje jammer wat hier gebeurt. Bart komt met een prima oplossing. Maarten komt met wat ongefundeerde spierballentaal door te stellen dat sessies achterhaald kunnen worden, en vervolgens gaat Johan hier ook nog eens klakkeloos in mee.

Misschien eerst even wat basiskennis opdoen alvorens dingen te roepen en op een onjuiste manier uit te gaan voeren?




Toevoeging op 29/06/2015 13:14:16:

PS Johan, graag alleen iets quoten als je NIET op de laatste reactie reageert. In overige gevallen is het niet nodig om telkens hele lappen tekst te quoten.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/06/2015 13:49:38
Quote Anchor link
Hier komt inderdaad een hoop informatie voorbij die de plank enigszins misslaat.

De inhoud van sessies kan alleen aan de serverzijde gewijzigd worden.

Er wordt doorgaans gerefereerd aan een sessie(id) via een cookie. Als het echt de bedoeling is dat een sessie persoonsgebonden is, en het niet de bedoeling is dat iemand anders die enkel kan overnemen als deze het cookie (en daarmee het sessie-id) weten, dan zul je meer voorzieningen moeten inbouwen, bijvoorbeeld een controle op ip.

Met deze eenvoudige voorziening is je sessie redelijk veilig.

Volgende stap is in de sessie bij te houden wie je bent, nadat je succesvol bent ingelogd. Je zou dan bijvoorbeeld je user id kunnen opslaan in je sessie.

Dan de beveiliging van je items: vergelijk de eigenaar van het item (als er zoiets is) met het user id in de sessie. Op grond daarvan besluit je of iemand toegang krijgt tot een item.

En als iemand geen user id in zijn sessie heeft zitten (dit houdt dus in dat iemand niet ingelogd is) heeft deze sowieso niets te zoeken in een adminpaneel...

Ik zou je inderdaad wat gaan verdiepen in hoe dingen werken, dan is de uitwerking van wat je wilt bereiken volgens mij een stuk simpeler.

EDIT security through obscurity is nooit een goed idee.
Gewijzigd op 29/06/2015 13:51:48 door Thomas van den Heuvel
 
Ward van der Put
Moderator

Ward van der Put

29/06/2015 14:14:03
Quote Anchor link
Thomas van den Heuvel op 29/06/2015 13:49:38:
Dan de beveiliging van je items: vergelijk de eigenaar van het item (als er zoiets is) met het user id in de sessie. Op grond daarvan besluit je of iemand toegang krijgt tot een item.

En daarom is het waarschijnlijk verstandig om eerst het uploaden in te bouwen, zodat je weet (a) wie (b) wat (c) waar mag opslaan. Daarna is het bewerken van die uploads namelijk makkelijker in te bouwen.
 
Johan de wit

johan de wit

29/06/2015 15:06:55
Quote Anchor link
Thomas: Voor inloggen wordt UserID via SESSIE opgeslagen. Na het ingelogen krijg je alleen items van ingelogde gebruikers te zien met link (item=1234) om te bewerken als dat nodig is.
 
Randy vsf

Randy vsf

29/06/2015 16:29:12
Quote Anchor link
Als de gebruiker alleen zijn eigen uploads te zien krijgt, hash dan de id van de items weg.
En plaats die hash in de link...
Gewijzigd op 29/06/2015 16:29:33 door Randy vsf
 
Ivo P

Ivo P

29/06/2015 17:10:18
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

if(user_is_ingelogd()) {
  
  if($id = filter_input(INPUT_GET, 'id') && id_is_van_user($id, $_SESSION['user'])) {
     if($_SERVER['REQUEST_METHOD'] == 'POST') {
         // doe update query's en zo.


         if($ok) {
            header('Location: ......' );
            exit();
         }
     }

     else {
         // GET, dus tonen edit scherm
     }

  

  }

  else {
      // foutmelding dat id niet gegeven is, of dat het niet een id is van deze user.
      // eventueel in het midden laten of het wel een bestaand id zou zijn.

  }

}

?>


die functie id_is_van_user() mag je zelf uitdenken.

Maar op deze manier kan iemand die niet ingelogd is bij geen enkele edit
iemand kan niet bij andermans editscherm om te kijken
en kan ook niet opslaan.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/06/2015 19:13:24
Quote Anchor link
Randy Flujowa op 29/06/2015 16:29:12:
Als de gebruiker alleen zijn eigen uploads te zien krijgt, hash dan de id van de items weg.
En plaats die hash in de link...

Als er fatsoenlijke controles voor "eigenaarschap" in zitten is dat niet nodig. Het bovenstaande is een overcomplificering die het uiteindelijke probleem (het afschermen van items) niet oplost.

De eenvoudigste manier om te controleren of iemand iets met een item mag doen is... controleren of iemand (wie) iets (wat) met een item mag doen.
 
Johan de wit

johan de wit

30/06/2015 00:13:06
Quote Anchor link
Ivo P op 29/06/2015 17:10:18:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

if(user_is_ingelogd()) {
  
  if($id = filter_input(INPUT_GET, 'id') && id_is_van_user($id, $_SESSION['user'])) {
     if($_SERVER['REQUEST_METHOD'] == 'POST') {
         // doe update query's en zo.


         if($ok) {
            header('Location: ......' );
            exit();
         }
     }

     else {
         // GET, dus tonen edit scherm
     }

  

  }

  else {
      // foutmelding dat id niet gegeven is, of dat het niet een id is van deze user.
      // eventueel in het midden laten of het wel een bestaand id zou zijn.

  }

}

?>


die functie id_is_van_user() mag je zelf uitdenken.

Maar op deze manier kan iemand die niet ingelogd is bij geen enkele edit
iemand kan niet bij andermans editscherm om te kijken
en kan ook niet opslaan.


Momenteel heb ik dit.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?PHP

session_start();
if (!(isset($_SESSION['user_login_status']) && $_SESSION['user_login_status'] != '')) {
    header ("Location: index.php");
    exit; // NA HEADER EEN EXIT EN JE SCRIPT STOPT DAN OOK DAADWERKELIJK
}

// INITIALISATIE ID MET DEFAULTWAARDE 0
$id = 0;
if(isset($_GET['id'])) {
    $id = intval(base64_decode($_GET['id']));
}


// VALIDATIE VAN $id
if($id < 1) {
    echo 'Ongeldige GET parameter id';
    exit;
}


// ALLEEN ROW VAN SESSIES IS TOEGESTAAN
if(isset($_GET['id'])) {
    if($_GET['id'] == $_SESSION['gebruikers_id']) {
        echo "Zonder ID kan ik niks!";
    }
else {
        echo "Foei, stout, niet lief! Jij mag niet andermans spulletjes verwijderen.";
    }
}
else {
    echo "Zonder ID kan ik niks!";
}


try {
    $dbc = new PDO('mysql:host=localhost; dbname=verborgen', 'verborgen', 'verborgen');
}
catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}


if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
    $query = "UPDATE tabelnaam SET iets=? WHERE id=?";
    $stmt = $dbc->prepare($query);
    $stmt->bindParam(6, $_POST['mid']);
    if($stmt->execute()) {
        echo "Geupdated";
    }
else {
        echo "Probeer nogmaals";
    }

    
    // EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
    header ("Location: whatever.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
    exit;
    
}

try {
    $query = "SELECT * FROM tabelnaam WHERE id=?";
    $stmt = $dbc->prepare($query);
    $stmt->bindParam(1, $id);
    $stmt->execute();
    $row=$stmt->fetch(PDO::FETCH_ASSOC);
    $id = $row['id'];
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

?>
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.