PDA

Bekijk Volledige Versie : versleuteling querystring waarde



rc.smit@planet.nl
29/01/06, 19:15
Hallo

Ik heb een tabel met nieuwsberichten met een autonummeringsveld als
primaire sleutel die ik oproep met show.asp?id=3D23.

Nu wil iets hebben zodat de 23 wordt versleuteld, zodat mensen niet
simpel het getalletje kunnen ophogen om de database leeg te plukken.

Zijn hier simpele routines voor? Of kan iemand me verder helpen met
trefwoorden zodat ik zelf verder kan Googlen?

Alvast bedankt,
Ren=E9

Rene Pijlman
29/01/06, 19:30
rc.smit@planet.nl:
>Ik heb een tabel met nieuwsberichten met een autonummeringsveld als
>primaire sleutel die ik oproep met show.asp?id=23.
>
>Nu wil iets hebben zodat de 23 wordt versleuteld, zodat mensen niet
>simpel het getalletje kunnen ophogen om de database leeg te plukken.

Je bedoelt waarschijnlijk niet versleutelen, want dan zou er een geheim
password nodig zijn.

>Zijn hier simpele routines voor? Of kan iemand me verder helpen met
>trefwoorden zodat ik zelf verder kan Googlen?

Ik denk dat je een toevalsgenerator zoekt. Zoek in de handleiding van de
library van jouw programmeertaal naar 'random'. Je moet er natuurlijk wat
code omheen schrijven om een unieke sleutel te krijgen.

--
René Pijlman

Wat wil jij worden? http://www.carrieretijger.nl

rc.smit@planet.nl
29/01/06, 19:45
Dank je voor je snelle antwoord

Misschien wil ik wel versleutelen, aangezien ik in eerste instantie
geen extra veld in mijn database wilde maken.

Ik gebruik trouwens ASP

ik dacht zoiets van:


=========
id = ..... 'haal ik uit de database

response.write "<A HREF='show.asp?id="& waardeversleutelen(id) & "'>"
................. (etc)


function functieontsleutelen(versleuteldid)
....
end function


==========
versleuteldid=request("id")
echtidee=waardeontsleutelen(versleuteldid)
sql="SELECT * FROM tabel WHERE id=" & echtidee

function waardeontsleutelen(versleuteldid)
....
end function
==============
etc

Rene Pijlman
29/01/06, 20:00
rc.smit@planet.nl:
>function waardeontsleutelen(versleuteldid)

Het bestaan van deze functie is strijdig met de requirement "zodat mensen
niet simpel het getalletje kunnen ophogen om de database leeg te plukken".

Immers, als jouw code zonder geheime sleutel kan ontsleutelen, dan kan
andermans code dat ook. Men ontsleutele dan een aangetroffen id, telt er 1
bij op en versleutelt dat weer.

Essentieel bij versleutelen is de sleutel :-) Die kan niet zonder verlies
van functionaliteit worden weggelaten.

Maar zonder dollen, een andere toepassingen waar zogenaamde 'hard to
guess' id's gegenereerd moeten worden is cookies. Zie bijvoorbeeld:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnasp/html/aspwsm.asp

Je zou eens kunnen kijken of dat mechanisme in ASP/IIS beschikbaar is voor
applicaties. Alleen vrees ik dat dat het client-IP gebruikt om te
'versleutelen', en dat kan bij jouw toepassing niet.

--
René Pijlman

Wat wil jij worden? http://www.carrieretijger.nl

Nico Schuyt
29/01/06, 20:00
rc.smit@planet.nl wrote:
> Hallo
>
> Ik heb een tabel met nieuwsberichten met een autonummeringsveld als
> primaire sleutel die ik oproep met show.asp?id=23.
> Nu wil iets hebben zodat de 23 wordt versleuteld, zodat mensen niet
> simpel het getalletje kunnen ophogen om de database leeg te plukken.
> Zijn hier simpele routines voor? Of kan iemand me verder helpen met
> trefwoorden zodat ik zelf verder kan Googlen?

Kan het niet met POST (door een formulier te gebruiken met submitbuttons bij
ieder nieuwsitem)?
Of de parameter in de URL wat minder opvallend maken
(mijndomein.nl/show/23/laatste-nieuws/):
http://www.zend.com/zend/spotlight/searchengine.php?article=searchengine&kind=sl&id=2578&open=1&anc=912&view=1

--
Nico Schuyt
http://www.nicoschuyt.nl/

robert
29/01/06, 22:00
Rene Pijlman <reply.in.the.newsgroup@my.address.is.invalid>:
> rc.smit@planet.nl:
>>function waardeontsleutelen(versleuteldid)
>
> Het bestaan van deze functie is strijdig met de requirement "zodat
> mensen niet simpel het getalletje kunnen ophogen om de database leeg te
> plukken".
>
> Immers, als jouw code zonder geheime sleutel kan ontsleutelen...

Dat 'zonder geheime sleutel' verzin je er zelf bij hoor, ik zie dat nergens
staan in de oorspronkelijke vraag.

--
robert

Niels Basjes
29/01/06, 23:00
On 29 Jan 2006 10:07:01 -0800, the lifeform known as rc.smit@planet.nl
wrote:

>Ik heb een tabel met nieuwsberichten met een autonummeringsveld als
>primaire sleutel die ik oproep met show.asp?id=23.
>
>Nu wil iets hebben zodat de 23 wordt versleuteld, zodat mensen niet
>simpel het getalletje kunnen ophogen om de database leeg te plukken.
>
>Zijn hier simpele routines voor? Of kan iemand me verder helpen met
>trefwoorden zodat ik zelf verder kan Googlen?

Een erg simpele oplossing is om geen autonummerings veld te gebruiken maar
een random getal te kiezen, toch even controleren dat het nog niet in
gebruik is en getal dat als lookup voor je artikelen gebruiken.


--
Niels.

Niels Basjes - http://niels.basjes.nl/ - VCV 20000302
mailto:`echo 'Niels Basjes'|awk '{print$1"@"$2".nl"}'`

Geert Wirken
29/01/06, 23:30
Niels Basjes schreef op 29-1-2006 22:38:
> Een erg simpele oplossing is om geen autonummerings veld te gebruiken maar
> een random getal te kiezen, toch even controleren dat het nog niet in
> gebruik is en getal dat als lookup voor je artikelen gebruiken.

In dat geval kan je er ook voor kiezen een hash te maken van een
willekeurig getal, en die dan te gebruiken als ID. Bijvoorbeeld een
md5-hash van een willekeurig getal (die uiteraard wel uniek moet zijn).
Je zou een pagina dan aan kunnen roepen met
show.asp?id=827ccb0eea8a706c4c34a16891f84e7b

--
Met vriendelijke groeten,
Geert Wirken

Rene Pijlman
29/01/06, 23:30
Geert Wirken:
>Niels Basjes:
>> een random getal te kiezen
>
>In dat geval kan je er ook voor kiezen een hash te maken van een
>willekeurig getal, en die dan te gebruiken als ID. Bijvoorbeeld een
>md5-hash van een willekeurig getal (die uiteraard wel uniek moet zijn).

Dat heeft geen zin. Willekeurig is willekeurig, een hash daarvan nemen
voegt niets toe.

--
René Pijlman

Wat wil jij worden? http://www.carrieretijger.nl

Geert Wirken
29/01/06, 23:45
Rene Pijlman schreef op 29-1-2006 23:21:
> Geert Wirken:
>>In dat geval kan je er ook voor kiezen een hash te maken van een
>>willekeurig getal, en die dan te gebruiken als ID. Bijvoorbeeld een
>>md5-hash van een willekeurig getal (die uiteraard wel uniek moet zijn).
>
>
> Dat heeft geen zin. Willekeurig is willekeurig, een hash daarvan nemen
> voegt niets toe.

Je hebt gelijk. Maar een hash van een willekeurige string is wel iets
lastiger te raden dan een random cijfer, omdat je (als je het goed doet)
veel meer mogelijkheden hebt. Je kunt ook een hash maken met karakters
(vraagteken, slash, etc) die je niet zonder meer in de URL kunt stoppen,
vandaar de hash.

--
Met vriendelijke groeten,
Geert Wirken

Rene Pijlman
30/01/06, 00:00
Geert Wirken:
>een hash van een willekeurige string is wel iets lastiger te raden
>dan een random cijfer, omdat je (als je het goed doet) veel meer
>mogelijkheden hebt.

Dat een getal willekeurig is beperkt zijn waardebereik niet. De OP kan ook
met ongehashte toevalsgetallen net zoveel mogelijkheden kiezen als hij
nodig vindt.

>Je kunt ook een hash maken met karakters (vraagteken, slash, etc) die je
>niet zonder meer in de URL kunt stoppen, vandaar de hash.

Maar de OP wil ze nou juist _wel_ in een URL stoppen :-)

--
René Pijlman

Wat wil jij worden? http://www.carrieretijger.nl

Jan Willem Roks
30/01/06, 15:45
on 29-01-2006 19:07 rc.smit@planet.nl wrote:
> Hallo
>
> Ik heb een tabel met nieuwsberichten met een autonummeringsveld als
> primaire sleutel die ik oproep met show.asp?id=23.
>
> Nu wil iets hebben zodat de 23 wordt versleuteld, zodat mensen niet
> simpel het getalletje kunnen ophogen om de database leeg te plukken.
>
> Zijn hier simpele routines voor? Of kan iemand me verder helpen met
> trefwoorden zodat ik zelf verder kan Googlen?
>
> Alvast bedankt,
> René
>

Je zou ook nog kunnen denken aan de HTTP_REFERER. Alleen als show.asp
wordt aangeroepen door index.asp (of hoe je file ook heet), dan laat je
de content uit je database zien, anders niet:

If Instr(Request.ServerVariables("HTTP_REFERER"),"index.asp") Then
'laat maar zien
Else
'pech gehad
End If

Jan Willem

Geert Wirken
30/01/06, 18:00
Jan Willem Roks schreef op 30-1-2006 15:35:
> Je zou ook nog kunnen denken aan de HTTP_REFERER.

Een Referer: is wel erg makkelijk te vervalsen. (zie referer-spam e.d.)
Bovendien schijnen er mensen te zijn die surfen zonder Referer-header
mee te sturen. Die sluit je dus ook uit.

--
Met vriendelijke groeten,
Geert Wirken

Geert Wirken
01/02/06, 00:00
Rene Pijlman schreef op 29-1-2006 23:45:
> Geert Wirken:
>>Je kunt ook een hash maken met karakters (vraagteken, slash, etc) die je
>>niet zonder meer in de URL kunt stoppen, vandaar de hash.
>
> Maar de OP wil ze nou juist _wel_ in een URL stoppen :-)

Jahaa, vandaar de hash ;-)

--
Met vriendelijke groeten,
Geert Wirken

Tjerk Wolterink
01/02/06, 22:45
rc.smit@planet.nl wrote:
> Hallo
>
> Ik heb een tabel met nieuwsberichten met een autonummeringsveld als
> primaire sleutel die ik oproep met show.asp?id=23.
>
> Nu wil iets hebben zodat de 23 wordt versleuteld, zodat mensen niet
> simpel het getalletje kunnen ophogen om de database leeg te plukken.
>
> Zijn hier simpele routines voor? Of kan iemand me verder helpen met
> trefwoorden zodat ik zelf verder kan Googlen?
>
> Alvast bedankt,
> René
>


Mischien is een betere oplossing het onderscheiden van 2 typen data:
gepubliceerde data
en
niet gepubliceerde data.

Gepubliceerde data mag door iedereen worden gelezen,
niet gepubliceerde niet.

Dan hoef je niks te versleutelen maar geef je gewoon mooi
het nieuwsbericht weer
of een melding dat het artikel niet bestaat / niet gepubliceerd is.

Zelf werk ik met een rollen systeem. En die rollen hebben weer
verschillende permissies tot de data ( crud: create / read / update /
delete). Ik kijk gewoon of de gebruiker een rol heeft die toestemming
heeft tot de data. Zo ja laat ik de gegevens zien. Dan maakt
het dus niet uit of de gebruiker zelf een id invult.


Mischien niet een antwoord op je vraag maar wel een oplossing voor je
probleem.