Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 20-01-2005, 13:40
Verwijderd
Iets om over na te denken..
Zorg dat javascript het wachtwoord eerst md5 codeerd voordat het gestuurd wordt, dan kan je de versleutelde wachtwoord sturen..
Dat is wel ultiem veilig

En in een aparte tabel sla je een userid, md5code (niet pass) en het IP op.
De md5code zet je dan in een sessie..
De browser onthoud de sessie en stuurt die naar de website..
De website checkt de md5code in de database EN het IP...
De row wordt iedere keer geupdate met een nieuwe datum bij een nieuwe aanvraag, en na een x aantal uur/minuten is de sessie niet meer geldig..

Veiliger kan ik het even niet verzinnen

Laatst gewijzigd op 20-01-2005 om 13:42.
Met citaat reageren
Advertentie
Oud 20-01-2005, 14:19
Jordi
Avatar van Jordi
Jordi is offline
Citaat:
Enlightenment schreef op 20-01-2005 @ 13:57 :
Ouch. Dus je hebt het wachtwoord ongecodeerd in cookie staan, en daarmee kan met ongelimiteerd inloggen no matter what? Tja dat is dus behoorlijk brak.
Zo stom ben ik nog net niet. Het wachtwoord staat wel gecodeerd in de cookie. Als je dan op de site komt, is er een functietje die checkt of er een cookie is en dan krijg je een alternatieve inlogprocedure die niet nog een keer het wachtwoord codeert. Maar goed, je kunt dus inderdaad wel iemands cookie jatten en dan inloggen bij mij.

Citaat:
Enlightenment schreef op 20-01-2005 @ 13:57 :
Maar als je forum een hobbyprojectje is en usersecurity geen prioriteit is, hoeft het geeneens zo erg te zijn.
Het is wel een hobbyprojectje, maar ik vind mijn hobby leuker als het een beetje professioneel is.


Citaat:
Enlightenment schreef op 20-01-2005 @ 13:57 :
Je moet twee dingen uit elkaar houden: PHP Sessies (PHPSESSID) en een eigen sessie-systeem. Ik doe het als volgt: bij het inloggen maak ik een secure session cookie aan, na 2 dagen komt de gebruiker terug op de site en bij de 1e pageview wordt hij automatisch ingelogd. Hij stuurt dan de secure session cookie op naar de server, de server controleert of deze geldig is. De server heeft de 32-byte tekenreeks onthouden en daaraan is een IP-adres en browserstring gekoppeld. Als alles in orde is (zelfde IP en browser), zal de gebruiker toegang krijgen tot de juiste access levels, deze worden opgeslagen in de PHP Sessie. Deze sessie wordt gekilled zodra de browser afgesloten wordt, en heeft een maximale duur van 1 dag. PHP sessie is dus de tijdelijke sessie en Secure Session (ssid) is de cookie van mn eigen systeem die een dag, een maand of een jaar geldig kan blijven. Mocht iemand toch onverhoopt toegang krijgen tot de ssid, dan heeft hij het wachtwoord niet van het account, hij zou misschien wel kunnen inloggen, maar door alle sessies te resetten (killen) is hij alle rechten kwijt en kan hij niks meer. Zeker een stuk veiliger dus.
OK, klinkt allemaal best slim.
Ik vraag me alleen af waar je dan die 32-bits string opslaat. Is dat gewoon een aparte kolom in de usertabel ofzo?
Het schuine deel snap ik niet, want volgens mij kan iemand met zo'n gejatte cookie/ssid dan alleen inloggen als hij dezelfde ip en browser heeft als de oorspronkelijke gebruiker (toch?). Als hij dat heeft, dan snap ik niet wat hem in de weg zou staan (waarom moet hij dan sessies killen?) en als hij dat niet heeft, komt hij er toch überhaupt niet in?

Citaat:
Enlightenment schreef op 20-01-2005 @ 13:57 :
Ja dat doe ik nu dus, maar smileys zoals < enzo veranderen ook. Valt allemaal wel op te vangen hoor, maar werken met regular expressions om weerbaar te zijn tegen foutieve-tags (niet goed afgesloten etc.) is niet mijn specialiteit.
Nu moet je < veranderen in een smiley. Dan moet je &lt; (ofzo) vervangen. Is in principe dezelfde procedure.

Citaat:
Enlightenment schreef op 20-01-2005 @ 13:57 :
mod_rewrite gebruik ik om ALLE requests naar 1 php file te sluizen. Mensen kunnen dus niet directories op de server rondneuzen en direct php scripts aanroepen. Dat vermindert de kans op hack-acties ook enigszins. Alles komt binnen op een centraal script die vervolgens de juiste scripts aanroept afhankelijk van de url. Daardoor krijg je ook mooie URLs, geen:

http://forum.fluffles.net/viewforum.php?f=7

Maar:

www.fluffles.net/forum/devschuur

en voor een topic:

www.fluffles.net/forum/devschuur/5

Staat een stuk professioneler vind ik.
Vind ik ook.
Dat wil ik ook al een tijdje maken, maar ik weet niet hoe dat moet. Ik kan ook niets vinden over mod_rewrite op www.php.net.
En hoe moet ik me voorstellen dat alles door één bestand gaat? Is dat dan gewoon een bestand met allemaal van dit soort statements?:
if (url == iets) include("iets.php")

Bedankt trouwens voor je uitgebreide antwoorden.
__________________
Mommy, that salesman's on TV!
Met citaat reageren
Oud 20-01-2005, 14:50
dafelix
Avatar van dafelix
dafelix is offline
Citaat:
********** schreef op 20-01-2005 @ 14:40 :
Iets om over na te denken..
Zorg dat javascript het wachtwoord eerst md5 codeerd voordat het gestuurd wordt, dan kan je de versleutelde wachtwoord sturen..
Dat is wel ultiem veilig
ik ben zelfs van plan, om het password+IP te coderen en dan controleren (dus: md5(password2130706433); ). op deze manier kan iemand die bijvoorbeeld per toeval deze data kan stelen, er niks mee vanaf een ander IP.

Citaat:
********** schreef op 20-01-2005 @ 14:40 :
En in een aparte tabel sla je een userid, md5code (niet pass) en het IP op.
De md5code zet je dan in een sessie..
De browser onthoud de sessie en stuurt die naar de website..
De website checkt de md5code in de database EN het IP...
De row wordt iedere keer geupdate met een nieuwe datum bij een nieuwe aanvraag, en na een x aantal uur/minuten is de sessie niet meer geldig..
verder gebruik ik idd een unique hash die de sessie aangeeft (cookie geset met userid en een cookie geset met de hash, die worden word met de DB vergeleken). maar de sessie vervalt in principe niet, want dan is de user nietmeer ingelogd (of bedoel je het anders?)
__________________
$karma++;
Met citaat reageren
Oud 22-01-2005, 09:16
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Het gaat vrij goed met de ontwikkeling van mijn forum.
  • Quoten werkt
  • Smileys werken
  • Moderator functies ingebouwd (topic sluiten / topic verplaatsen / topictitel veranderen / topic verwijderen)
  • Sommige fora (zoals Nieuws & Mededelingen) zijn "no posting" gemarkeerd; alleen mods en admins kunnen er posten
  • Users kunnen posts aanpassen en verwijderen door bij het aanpassen het berichtvenster helemaal leeg te maken en dan te versturen.
De meestgebruikte forumfuncties zijn nu ingebouwd. Nu beetje debuggen en wat safeguards inbouwen (maximumlengte topictitels en floodprotection enzo.)
Ben er best trots op, toch binnen paar daagjes gedaan.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 22-01-2005, 09:26
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
Jordi schreef op 20-01-2005 @ 15:19 :
OK, klinkt allemaal best slim.
Ik vraag me alleen af waar je dan die 32-bits string opslaat. Is dat gewoon een aparte kolom in de usertabel ofzo?
Ja, ik heb een dsm-user-sessions tabel:

(id, uid, ssid, sid, ip, useragent, start_date, expire_date, alertlevel)

De 'eigen' sessies sla ik op in database, dat is voor de eerste contact waarmee de gebruiker automatisch ingelogd wordt. de php sessie neemt het daarna over, en houdt gewoon $_SESSION in stant, wel wordt elke keer het IP gecontroleerd en nog wat andere checks.
Citaat:
Het schuine deel snap ik niet, want volgens mij kan iemand met zo'n gejatte cookie/ssid dan alleen inloggen als hij dezelfde ip en browser heeft als de oorspronkelijke gebruiker (toch?). Als hij dat heeft, dan snap ik niet wat hem in de weg zou staan (waarom moet hij dan sessies killen?) en als hij dat niet heeft, komt hij er toch überhaupt niet in?
Inderdaad gekoppeld aan IP en Browser, maar stel je hebt ingelogd op computer van een vriend, en hij gaat ermee aan de haal? Dan kun je thuis de sessie resetten, mits hij dat niet eerst bij jouw sessie doet dan.
Maar het gaat om het principe, de sessie heeft verder niets met het wachtwoord te maken, ook een MD5 van een wachtwoord is minder veilig dan een compleet random tekenreeks versturen, die te alle tijde door user of admins met een klik gekilled kan worden, en sowieso een expire time heeft (zoals 1 dag, 1 week of 1 maand).
Citaat:
Nu moet je < veranderen in een smiley. Dan moet je &lt; (ofzo) vervangen. Is in principe dezelfde procedure.
Yep, dat heb ik nu ook geimplementeerd op mn site. Smileys werken goed.
Citaat:
Dat wil ik ook al een tijdje maken, maar ik weet niet hoe dat moet. Ik kan ook niets vinden over mod_rewrite op www.php.net.
En hoe moet ik me voorstellen dat alles door één bestand gaat? Is dat dan gewoon een bestand met allemaal van dit soort statements?:
if (url == iets) include("iets.php")
Inderdaad ja, alhoewel ik require() gebruik. Die gaat stijgeren zodra de file niet bestaat, in plaats van door te gaan. Een verkorte procedure:

* static redirects
* image handler
* file handler
* procedures (statistieken enzo)
* dynamic redirects

Even globaal genomen.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 22-01-2005, 11:46
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Echt knap, dat forum van je, enlightenment !!!


Citaat:
Enlightenment schreef op 22-01-2005 @ 10:26 :
Ja, ik heb een dsm-user-sessions tabel:

(id, uid, ssid, sid, ip, useragent, start_date, expire_date, alertlevel)

De 'eigen' sessies sla ik op in database, dat is voor de eerste contact waarmee de gebruiker automatisch ingelogd wordt. de php sessie neemt het daarna over, en houdt gewoon $_SESSION in stant, wel wordt elke keer het IP gecontroleerd en nog wat andere checks.

Inderdaad gekoppeld aan IP en Browser, maar stel je hebt ingelogd op computer van een vriend, en hij gaat ermee aan de haal? Dan kun je thuis de sessie resetten, mits hij dat niet eerst bij jouw sessie doet dan.
Maar het gaat om het principe, de sessie heeft verder niets met het wachtwoord te maken, ook een MD5 van een wachtwoord is minder veilig dan een compleet random tekenreeks versturen, die te alle tijde door user of admins met een klik gekilled kan worden, en sowieso een expire time heeft (zoals 1 dag, 1 week of 1 maand).
Best interessant, ben nu bezig met een login-systeem voor een website, waarop ik later ook een forum ga integreren. Maar als ik dit topic zo lees, zitten er in mijn login-systeem toch nog wel wat gaten.

Hoe gebeurt het dan net bij jou?

Je geeft je gebruikersnaam en wachtwoord in. Dit wordt gecodeerd en verzonden naar de webserver. Daar wordt het gecodeerde wachtwoord en username vergeleken met de database om te zien of dit correct is. Hierna wordt er zo'n ssid aangemaakt (de ssid was toch het sessionid dat je zelf aanmaakte in een database eh ?) op basis van je username, je IP en je browser en aan de hand hiervan wordt een cookie aangemaakt waarmee je volgende keren automatisch wordt ingelogd. Klopt dit ?

Stel nu dat je geen cookie zou aanmaken, dan is het toch enkel nodig om je gebruikersnaam en wachtwoord gecodeerd naar de DB te verzenden en als dit correct is, de nodige info in de session (die van je browser) te zetten. Of sla ik de bal hier compleet mis en is dit echt onveilig ?


Btw, het tonen van de 5 recentste topics op je homepagina. Netjes !
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 22-01-2005, 14:33
Jordi
Avatar van Jordi
Jordi is offline
Ik vind het er ook erg mooi uitzien en het is knap dat je er zo kort over hebt gedaan.

Echter het quoten werkt geloof ik nog niet helemaal super. (kijk maar even op je eigen Devschuur forum in het 'quoten werkt' topic)
__________________
Mommy, that salesman's on TV!
Met citaat reageren
Oud 22-01-2005, 16:23
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
Jordi schreef op 22-01-2005 @ 15:33 :
Ik vind het er ook erg mooi uitzien en het is knap dat je er zo kort over hebt gedaan.

Echter het quoten werkt geloof ik nog niet helemaal super. (kijk maar even op je eigen Devschuur forum in het 'quoten werkt' topic)
Dat heb expres zo gedaan. De quotes zijn niet 'genest', dus recursief. Hij pakt de eerste [ quote ] en de laatste [ /quote ] en alles daar tussenin behandelt hij als plaintext, qua quotes in elk geval.

Ik gebruik <p> </p> als quote blocks, en dat nesten wilde niet erg, bovendien is de code wat moeilijker. Wat ik wil doen als je een bericht quote waar al een quote in zit, is die quote-tekst eruit halen. Net zoals hier op op s.com gebeurt dus, en wellicht ook GoT/Fok.

Ik vond het leuker dat ik een topic had gesloten, maar ze gewoon nog konden doorposten.
Maarja die pret is nu ook over.
__________________
Per undas adversas (tegen de stroom in)

Laatst gewijzigd op 22-01-2005 om 16:25.
Met citaat reageren
Oud 22-01-2005, 16:49
Caroo
Avatar van Caroo
Caroo is offline
********** zegt:
Gebruik voor quote <blockquote>
__________________
[ Caroo.nl ]
Met citaat reageren
Oud 22-01-2005, 20:09
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Verder moet je natuurlijk wel een uitgebreider rechtensysteem hebben dan alleen "noposting" fora.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 22-01-2005, 20:13
Jordi
Avatar van Jordi
Jordi is offline
Citaat:
Enlightenment schreef op 22-01-2005 @ 17:23 :
Dat heb expres zo gedaan. De quotes zijn niet 'genest', dus recursief. Hij pakt de eerste [ quote ] en de laatste [ /quote ] en alles daar tussenin behandelt hij als plaintext, qua quotes in elk geval.

Ik gebruik <p> </p> als quote blocks, en dat nesten wilde niet erg, bovendien is de code wat moeilijker. Wat ik wil doen als je een bericht quote waar al een quote in zit, is die quote-tekst eruit halen. Net zoals hier op op s.com gebeurt dus, en wellicht ook GoT/Fok.
Maar ook als je dat doet kan het nog niet dat je alleen de eerste en de laatste quote pakt lijkt me. Want als mensen een quote dan opsplitsen (zoals ik nu) dan gaat dat toch nog steeds fout?

Citaat:
Enlightenment schreef op 22-01-2005 @ 17:23 :
Ik vond het leuker dat ik een topic had gesloten, maar ze gewoon nog konden doorposten.
Maarja die pret is nu ook over.
Zoiets had ik eerst ook. Ik had nog net wel de quickreply weggehaald, maar mensen konden nog wel gewoon normaal replyen. Maar goed, dit is natuurlijk niet interessant voor jullie en ik typ dit eigenlijk ook alleen maar zodat ik een soort reden heb om jouw post in twee stukken te quoten.
__________________
Mommy, that salesman's on TV!
Met citaat reageren
Oud 22-01-2005, 23:47
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
Manuzhai schreef op 22-01-2005 @ 21:09 :
Verder moet je natuurlijk wel een uitgebreider rechtensysteem hebben dan alleen "noposting" fora.
Dat is al ingebouwd, namelijk access levels. Standaard heeft een forum level 0 of level 1. Dat gaat tot en met level 9. Als ik bijvoorbeeld fora alleen toegankelijk wil maken voor members, stel ik level 3 in. Dan kun je als je niet ingelogd bent dus ook niet het forum bekijken, en in combinatie met S-flag (Secret) wordt het forum dan ook verborgen.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 22-01-2005, 23:51
Enlightenment
Avatar van Enlightenment
Enlightenment is offline
Citaat:
Jordi schreef op 22-01-2005 @ 21:13 :
Maar ook als je dat doet kan het nog niet dat je alleen de eerste en de laatste quote pakt lijkt me. Want als mensen een quote dan opsplitsen (zoals ik nu) dan gaat dat toch nog steeds fout?
Mja daar heb je gelijk in. Dan moet ik een wat geavanceerder algoritme maken, misschien vannacht.
Citaat:
Zoiets had ik eerst ook. Ik had nog net wel de quickreply weggehaald, maar mensen konden nog wel gewoon normaal replyen. Maar goed, dit is natuurlijk niet interessant voor jullie en ik typ dit eigenlijk ook alleen maar zodat ik een soort reden heb om jouw post in twee stukken te quoten.
Die bug is nu gefixed iig.
__________________
Per undas adversas (tegen de stroom in)
Met citaat reageren
Oud 23-01-2005, 12:22
Energie
Avatar van Energie
Energie is offline
Ziet er goed uit, misschien is het leuk als je het opensource maakt zodat de forum in de toekomst nog uitgebreider kan worden.
__________________
i'll be your groupie baby, Cuz you are my superstar, Im your number one fan, give me your autograph, Sign it right here on my (L)
Met citaat reageren
Oud 30-01-2005, 14:28
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
'k Was het topic nog eens aan het doorlezen, en dat idee om flags te gebruiken, vind ik wel zeer goed. 'k Denk dat ik iets soortgelijks ga gebruiken op de website die ik aan het maken ben.

Nu, jullie spraken van dit te doen met bits. Effe misschien een domme vraag, maar hoe sla je zoiets dan concreet op in je database? Als je het als getal opslaat, dan verlies je je voorste nullen. En een type waarin je bits kan opslaan, ben ik precies nog niet tegengekomen. Als tekst dan ?
Of hoe doe je ziets ?
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 30-01-2005, 14:40
dafelix
Avatar van dafelix
dafelix is offline
Citaat:
Kawoutertje schreef op 30-01-2005 @ 15:28 :
'k Was het topic nog eens aan het doorlezen, en dat idee om flags te gebruiken, vind ik wel zeer goed. 'k Denk dat ik iets soortgelijks ga gebruiken op de website die ik aan het maken ben.

Nu, jullie spraken van dit te doen met bits. Effe misschien een domme vraag, maar hoe sla je zoiets dan concreet op in je database? Als je het als getal opslaat, dan verlies je je voorste nullen. En een type waarin je bits kan opslaan, ben ik precies nog niet tegengekomen. Als tekst dan ?
Of hoe doe je ziets ?
ik denk dat ze dit bedoelen


1 - Geen toegang voor not-members
2 - Geen toegang voor members die nog niks gepost hebben
4 - Alleen toegang voor MODs
8 - Alleen toegang voor OPs

(niet lettende op de flags, daar deze in principe niet gecombineerd kunnen worden)

als je zowel flag 1 als 2 aanzet, krijg je '3', als je flag 1 en 4 hebt, krijg je '5'. via de AND methodiek kun je deze gemakkelijk uitlezen

Code:
input = 3
if (2 AND input) {
  wees zichtbaar
}
elseif (4 AND input) {
  wees onzichtbaar
}
else {
  die
}
__________________
$karma++;
Met citaat reageren
Oud 30-01-2005, 16:34
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Citaat:
eddie schreef op 19-01-2005 @ 12:40 :
Flags zijn cool. Gebruik dan wel binary flags; is veel efficienter.

Bit0 = closed
Bit1 = Hidden

00 = visible, open
01 = visible, closed
10 = hidden, open
11 = hidden, closed

etc.
@Dafelix:
Ze spreken hier van binary flags, dus weet ik eigenlijk niet of ze bedoelen het te doen aan de hand van optelling van getallen.

Het uitlezen van zulke flags lijkt me wel eenvoudiger dan het uitlezen van jouw flags, maar ik kan me vergissen.
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 30-01-2005, 17:13
Jordi
Avatar van Jordi
Jordi is offline
Ik denk dat die binaire getallen vooral voor jezelf zijn en dat je het voor het systeem toch moet vertalen in decimale.

Vervolgens moet je dan denk ik als volgt checken of een flag aanstaat:
PHP-code:
// 0de bit
if ($flag == 0doe iets
else { 
doe iets anders;
$flag-=1;
}
// 1ste bit
if ($flag == 0doe iets
else { 
doe iets anders;
$flag-=2;
}
//2de bit
if ($flag == 0doe iets
else { 
doe iets anders;
$flag-=4;
}

// ?de bit
if ($flag $a == 0doe iets
else { 
doe iets anders;
$flag-=$b;
}
?> 
Dus als je voor de n-de bit (beginnend bij 0) wilt kijken wat hij is, dan neem je voor $a 2^(n+1) en voor $b 2^n.

Alleen weet ik dan nog even geen effectieve methode als je graag achter de waarde van één bit wilt komen die midden in de flag staat.
Misschien zo:
PHP-code:
function power($base$power) {
$outcome 1;
for (
$i=0$i $power$i++)
$outcome *= $base;
return 
$outcome;
}

// functie levert een boolean-waarde, maar daar 
// heb je in feite evenveel aan als aan een één (true)
// of een nul (false).
function getBitValue ($bit$flag) {
for (
$i=0$i<$bit$i++)
if (
$flag power(2$i+1)) $flag-=power(2$i);
return 
$flag power(2$bit);
// of: return $flag % power(2, $i);
}
?> 
__________________
Mommy, that salesman's on TV!

Laatst gewijzigd op 30-01-2005 om 17:16.
Met citaat reageren
Oud 30-01-2005, 20:29
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Dit probleem los je op door te werken met constanten die een waarde uit de reeks 2^x hebben. Bijvoorbeeld zo:

PHP-code:
define('PERM_READ'1)
define('PERM_WRITE'2)
define('PERM_EXEC'4)

// Pipo mag lezen en schrijven
$userperms PERM_READ PERM_WRITE;

// Mag pipo lezen?
if ($userperms PERM_READ) {
   print 
'Je mag lezen!';

Weet niet of het precies klopt met de binaire operators, maar zo wordt het volgens mij meestal gedaan.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 30-01-2005, 21:14
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Mja idd, zo zou je het inderdaad kunnen doen.

Maar is het dan eigenlijk niet eenvoudiger om het als text op te slagen, en dan de sting te gebruiken zoals ie intern eigenlijk is: als een array van chars.

Dan kan je gewoon je string character per character uitlezen en/of doorlopen, even naar een integer parsen en dan vergelijk met 0 of 1? 'k Denk zelfs even dat dat laatste niet nodig is, want als ik me goed herinner wordt if(1) geinterpreteerd als if(true). En if(0) als if(false).

Of gaat het toch sneller en beter als je het numeriek doet met machten van 2?

even tussendoor: Sorry dat ik het niet vlug even in PHP-code typ, maar ik ben niet zo thuis in PHP. Ik versta de code wel als ik ze lees, maar om het zelf te schrijven, daar moet ik nog even wat op oefenen. 'k Ben een verstokte ASP'er.

[edit]
What the heck, let's try it :
PHP-code:
$flags "010";

if( *(
$flags) == 1){
        
mag lezen
}
else{
        
mag niet lezen
}

if( *(
$flags+1) == 1){
         
mag schrijven
}
else{
         
mag niet schrijven

... 
kan zijn dat dit stukje code helemaal verkeerd is hoor, maar ja
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.

Laatst gewijzigd op 30-01-2005 om 21:18.
Met citaat reageren
Oud 30-01-2005, 21:49
dafelix
Avatar van dafelix
dafelix is offline
Citaat:
Kawoutertje schreef op 30-01-2005 @ 22:14 :

*tekst*
wat mijn bedoeling was, en volgens mij echt heel gemakkelijk is

PHP-code:
$flags 6;
// $flags = 2 + 4

if (AND $flags) {
  echo 
"Mag lezen";
}
else {
  echo 
"Mag niet lezen <--";
}

if (
AND $flags) {
  echo 
"Mag schrijven <--";
}
else {
  echo 
"Mag niet schrijven";
}

if (
AND $flags) {
  echo 
"Mag geschreven wijzigen <--";
}
else {
  echo 
"Mag geschreven niet wijzigen";
}

if (
AND $flags) {
  echo 
"Dit wel";
}
else {
  echo 
"Dit niet <--";

zoals Manuzhai dus zei, maar op een iets andere manier
__________________
$karma++;
Met citaat reageren
Oud 30-01-2005, 23:04
Jordi
Avatar van Jordi
Jordi is offline
Wat doet if ($flags AND 2)?

Dit lijkt me geen normale boolean. Want als je dat wel zo zou interpreteren is de waarde van de gecombineerde boolean alleen afhankelijk van $flags, want die 2 is natuurlijk altijd true (want elk geheel getal > 0 is true). Dus dan zou je net zo goed if ($flags) kunnen schrijven toch? En als dat een normale boolean is, dan controleert die ook alleen maar of $flags wel groter is dan 0.

Ik neem aan dat het zo niet werkt, want dat zou nogal doelloos zijn, maar hoe werkt het dan wel?

En nog een vraagje:
Hoe moet ik dit zien:
if( *($flags+1) == 1)
?

Wat is dat sterretje?

O, en nog één:
$userperms = PERM_READ | PERM_WRITE;

Wat doet zo'n verticale streep?
__________________
Mommy, that salesman's on TV!
Met citaat reageren
Oud 31-01-2005, 08:48
Verwijderd
Citaat:
Jordi schreef op 31-01-2005 @ 00:04 :

O, en nog één:
$userperms = PERM_READ | PERM_WRITE;

Wat doet zo'n verticale streep?
Bitwise operators in PHP

Dafelix, Kawoutertje en Manuzhai hebben allemaal gelijk.
Citaat:
Bit0 = closed
Bit1 = Hidden

00 = visible, open
01 = visible, closed
10 = hidden, open
11 = hidden, closed
Even ter verduidelijking: De rechten worden opgeslagen als een nummertje, dus niet als karakter string. Hieronder een lijstje met de decimale variant:

0 = visible, open
1 = visible, closed
2 = hidden, open
3 = hidden, closed

Om te testen of een bit aanstaat, kun je de & operator in PHP gebruiken. Houdt er wel rekening mee dat je de decimale waarde van de bit moet gebruiken; dwz voor bits 1 t/m 4 zijn dit 1, 2, 4 en 8 (0001b, 0010b, 0100b, 1000b). Door deze op te tellen kun je de bits combineren: 8 + 2 + 1 = 11 (=1011b).

De bitwise and (de &) doet het volgende:

Alle bits van de eerste operand worden gematched met de tweede en alleen de bits die 1 zijn blijven 1, de rest wordt 0.

0001b & 0001b = 0001b (1 & 1 = 1)
0011b & 0010b = 0010b (3 & 2 = 2)
1011b & 0100b = 0000b (11 & 4 = 0)

Stel een gebruiker heeft de rechtenflag 0110b (= 6).
Ik wil controleren of deze lees rechten heeft; leesrechten liggen bijvoorbeeld in bit 2 (= 2).
Dan doe je bijvoorbeeld:
PHP-code:
if( ($userrights 2) == 2){} 
Schrijfrechten liggen bijvoorbeeld vast in bit 3 (= 4).
PHP-code:
if( ($userrights 4) == 4){} 
Een controle op lees en schrijfrechten is een controle op 2 + 3 = 5
PHP-code:
if( ($userrights 5) == 5){} 
Beter is om het als volgt de doen:
PHP-code:
if( ($userrights & (4)) > 0){} 
Hier is de | operator erbij gekomen. Deze combineerd de 1-en van operand een met operand twee:

0001b | 0001b = 0001b (1 | 1 = 1)
0011b | 0010b = 0011b (3 | 2 = 3)
1011b | 0100b = 1111b (11 | 4 = 15)
Met citaat reageren
Oud 31-01-2005, 14:02
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Alleen zou je al in je eerste programmeer-lessen (als je er ooit les in hebt gehad) moeten leren dat het een slecht idee is om zo'n 2 of 4 hard te coderen; hier kan je beter constants voor gebruiken. Daarmee is het duidelijk wat je aan het doen bent, en bovendien kun je later nog eens je permissies door elkaar gooien (de permissies op een andere volgorde opslaan) zonder dat je je hele code hoeft te veranderen.

Dus gebruik niet losse 2'tjes, 1'tjes en 4'tjes, maar gebruik PERM_READ, PERM_WRITE, PERM_EXE, of andere constanten.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 31-01-2005, 14:16
Verwijderd
Citaat:
Manuzhai schreef op 31-01-2005 @ 15:02 :

Dus gebruik niet losse 2'tjes, 1'tjes en 4'tjes, maar gebruik PERM_READ, PERM_WRITE, PERM_EXE, of andere constanten.
Uiteraard.


[smoes]
Ik wou het niet nog moeilijker maken.
[/smoes]
Met citaat reageren
Oud 31-01-2005, 17:11
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline


Okee, besluit van mijn vraag: gebruik een int-veld in de database

Bedankt voor de reacties, ik weet weer wat doen...
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 31-01-2005, 21:26
Jordi
Avatar van Jordi
Jordi is offline
Citaat:
eddie schreef op 31-01-2005 @ 09:48 :

Een controle op lees en schrijfrechten is een controle op 2 + 3 = 5
PHP-code:
if( ($userrights 5) == 5){} 
Bedankt voor de duidelijke uitleg, ik denk dat ik het snap. Tenminste, als het bovenstaande een foutje is. Want je zei dat iemand leesrechten had als $userrights & 2 == 2, en schrijfrechten als $userrights & 4 == 4. Als iemand dan lees- en schrijfrechten heeft, dan moet zowel de tweede als de derde bit aanstaan toch? Dat is dan toch samen 6? Want 0110 = 6, lijkt me. Ik vermoed dus dat die 2+3=5 (moet 2+4=6 zijn lijkt me) een foutje is, maar als dat niet zo is, dan denk ik dat ik het toch nog niet helemaal snap...

Want voor zover ik het begrijp, zou iemand met flag 0110 (=6) mogen lezen en schrijven, maar als je daarop controleert zou het fout gaan. Want dan krijg je:
0110 & 0101 = 0100
(6 & 5 = 4)

Toch?
__________________
Mommy, that salesman's on TV!
Met citaat reageren
Oud 01-02-2005, 07:49
Verwijderd
Citaat:
Jordi schreef op 31-01-2005 @ 22:26 :
Bedankt voor de duidelijke uitleg, ik denk dat ik het snap. Tenminste, als het bovenstaande een foutje is. Want je zei dat iemand leesrechten had als $userrights & 2 == 2, en schrijfrechten als $userrights & 4 == 4. Als iemand dan lees- en schrijfrechten heeft, dan moet zowel de tweede als de derde bit aanstaan toch? Dat is dan toch samen 6? Want 0110 = 6, lijkt me. Ik vermoed dus dat die 2+3=5 (moet 2+4=6 zijn lijkt me) een foutje is, maar als dat niet zo is, dan denk ik dat ik het toch nog niet helemaal snap...

Want voor zover ik het begrijp, zou iemand met flag 0110 (=6) mogen lezen en schrijven, maar als je daarop controleert zou het fout gaan. Want dan krijg je:
0110 & 0101 = 0100
(6 & 5 = 4)

Toch?
Je hebt helemaal gelijk. Ik was met gedachten bij 'bit 3' toen ik de '2 + 3' intypte (vandaar de 3)...

Verder, als je wilt controleren op lees of schrijfrechten, moet je controleren of het resultaat groter is dan 0:

($userrights & (2+4)) > 0.

Of, beter, met constanten werken, zoals Manuzhai als heeft gezegd:

($userrights & (PERM_READ | PERM_WRITE)) > 0

Vergeet de haakjes niet!
Met citaat reageren
Oud 01-02-2005, 07:53
Verwijderd
Citaat:
Kawoutertje schreef op 31-01-2005 @ 18:11 :


Okee, besluit van mijn vraag: gebruik een int-veld in de database

Bedankt voor de reacties, ik weet weer wat doen...
Je zou ook een smallint/tinyint kunnen gebruiken, afhankelijk van de hoeveelheid bits die je nodig denkt te hebben
Met citaat reageren
Oud 01-02-2005, 09:07
Kawoutertje
Avatar van Kawoutertje
Kawoutertje is offline
Citaat:
eddie schreef op 01-02-2005 @ 08:53 :
Je zou ook een smallint/tinyint kunnen gebruiken, afhankelijk van de hoeveelheid bits die je nodig denkt te hebben
Idd, das waar, kan ik doen.

Normaal zou een tinyint wel moeten volstaan (8 bits unsigned), maar ik denk toch voor alle zekerheid maar den smallint te nemen (16 bits unsigned). Wordt wel een fameuze flag als ik alle 16 bits opgebruik

Thx voor de tip, 'k had er eerlijk gezegd zelf niet aan gedacht
__________________
When you are arguing with an idiot, make sure the other person isn't doing the same thing.
Met citaat reageren
Oud 01-02-2005, 12:19
Verwijderd
Citaat:
Kawoutertje schreef op 01-02-2005 @ 10:07 :
Wordt wel een fameuze flag als ik alle 16 bits opgebruik
Je kan bepaalde rechten ook combineren. Zo het je om te bewerken zowel lees- als schrijfrechten nodig.
Je kan dan een PERM_EDIT maken, met PERM_READ | PERM_WRITE:
PHP-code:
define'PERM_READ');
define'PERM_WRITE');
define'PERM_EXEC');
define'PERM_EDIT'PERM_READ PERM_WRITE );

if( (
$userrights PERM_EDIT) > 0){} 
Met citaat reageren
Oud 09-03-2005, 12:30
Verwijderd
Hoe staan de zaken er ondertussen voor?


Ovrigens, nog een leuke en volgens mij unieke optie voor een forum.
Een soort van rollback functie..

Dat de mod kan zien welke voorgaande wijzigingen zijn gedaan
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar

Soortgelijke topics
Forum Topic Reacties Laatste bericht
De Kantine De kleur van jouw forum
Verwijderd
84 30-05-2010 22:21
Psychologie Diepzeechatten: van chatten naar verkenchatten
Waterput
12 02-01-2008 10:01
Beleidszaken [Films & TV] Spoilers
Enfant Terrible
55 08-07-2003 00:59
Psychologie Haat mezelf
Snippie
50 03-11-2002 16:03
De Kantine De BrEeZaH-cultuur, de ontwikkeling van een internetgeneratie.
Verwijderd
96 29-08-2002 11:32
Drugs & Alcohol Het gebruik van middelen
Internationalist
6 20-04-2002 10:39


Alle tijden zijn GMT +1. Het is nu 16:34.