Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » Dexter 07:29
 » mr-owl 07:29
 » Kenny 07:25
 » NimnuL 07:23
 » leosh 07:21
 » Robak 07:17
 » cVas 07:15
 » waski 07:09
 » kemilk 06:57
 » PCCPU 06:56
 » AfiP 06:55
 » Miron 06:48
 » Ziomek 06:40
 » DYD 06:40
 » ProSavage 06:25
 » PeKa 06:22
 » fox19 05:58
 » bmiluch 05:37
 » P@blo 05:31
 » alien1 05:25

 Dzisiaj przeczytano
 41121 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2024
A R C H I W A L N A   W I A D O M O Ś Ć
    

Parę pytań o schemat działania pewnych mechanizmów w programowaniu / PHP / , kubazzz 12/02/09 20:03
1. Chciałbym na przykład sprawdzić, czy jakaś zmienna równa się jakiejś wartości ze zbioru, inaczej mówiąc czy x równa się a, albo b, albo c, albo d.
Da się to zapisać za jednym podejściem?
Czy trzeba rozbić na x==a || x==b || x==c || x==d
[ja miałem coś takiego na myśli, ale nie działa: x == (a || b || c || d) ].

2. Jak dokladnie wyglada taki mechanizm logowania uzytkownikow jaki jest na wielu stronach, w tym na tpc?
W zasadzie to ja wykombinowalem idee, ale boje sie ze czegos nie przewidze piszac cos takiego.

To co wiem przedstawie w punktach:
1. Uzytkownik logujac sie na stronie podaje haslo i login, skrypt php sprawdza zgodnosc tego hasla i loginu na podstawie bazy danych uzytkownikow. nihil novi.

2. kiedy haslo i login sie zgadzaja, skrypt generuje klucz sesji, np $ses_id = md5($login+time()) i zapisuje $ses_id do bazy danych, do tablicy SESJE oraz dodatkowo do COOKIE po stronie uzytkownika.

3. Kiedy ktokolwiek wchodzi na strone to skrypt sprawdza, czy istnieje COOKIE, czy jest w tym ciasteczku zapisany klucz sesji, jesli jest to sprawdza czy istnieje taki klucz w bazie, w tablicy SESJE, jesli istnieje to traktuje uzytkownika jako zalogowanego.


Pytanie teraz - jakie rzeczy powinno sie w tym mechanizmie zmodyfikowac, albo dopisac, zeby
a - byl on bardziej bezpieczny [nie jak w CIA, ale zeby nie dalo sie zbyt latwo podpiac pod kogos]
b - zeby byl bardziej wydajny, moze jakos zmniejszyc ilosc zapytan do bazy danych, czy zapytan o ciasteczko


3. Zrobilem sobie skrypt do laczenia z baza danych, w zasadzie to zwykle pare linijek.

$baza_connected = false;


$baza = new mysqli('serwer.pl','db','haslo','db');
if (mysqli_connect_errno()) {
printf("Nieudane połączenie z bazą: %s\n", mysqli_connect_error());
$baza_connected = false;
exit();
}
else
{
echo "udało się połączyć z bazą!<br/>";
$baza_connected = true;
}

i potem sobie piszę w kodzie
if($baza_connected == true)
{
// robi coś tam
}

Zrobiłem tak, żeby unikać zbyt dużo osadzonych klamerek.

Moja wątpliwość jest teraz taka - jeśli wyrzucę ten kod łączenia się z bazą do osobnego pliku i dam include, albo require, to jak będzie traktowana zmienna $baza_connected ?

A może zrobić z tego funkcję? A może funkcję w osobnym pliku?

To są dosyć lamerskie pytania, zdaję sobie sprawę, wynika to z braku kompleksowej wiedzy i doświadczenia, trochę szukałem odpowiedzi, trochę znalazłem, ale jednak odpowiedź żywego człowieka jest dla mnie lepsza niż samodzielna intepretacja google results.

SM-S908

  1. hmm , _oLo_1984 12/02/09 20:59
    1. in_array() - w manualu doczytasz szczegóły
    2. generalnie / schematycznie tak to się przedstawia, przynajmniej z mojego doświadczenia, dodaj do tego jeszcze zapiswanie przeglądarki użytkownika do bazy i session_regenerate_id i coś całkiem przyzwoitego będzie
    3. można to zapisać do osobnego pliku i zrobić z tego funkcję, nie wiem w jakim stopniu umiesz programować, ale zobacz może co to jest sterownik mysql - może to Cię na coś naprwadzi

    awake

    1. rozszerz kwestię , kubazzz 12/02/09 22:16
      session_regenerate_id

      SM-S908

      1. kwestia bezpieczeństwa , _oLo_1984 13/02/09 07:23
        używając jej utrudnisz potencjalnemu złoczyńcy przejęcie identyfikatora sesji

        awake

  2. hashowanie hasla , TheW@rrior 12/02/09 22:28
    trochę kodu który powoduje że wysyłamy jedynie zaszyfrowane hasło:

    if($haslo != $row[hash]) $haslo = md5($haslo.$row[klucz]); //jesli haslo nie zgadza sie z tym co mamy w tablicy to hashujemy
    if($haslo == $row[hash]) { //jesli sie zgadza
    unset($_SESSION['haslo']); //ponowne generowanie klucza i hasha na podstawie tego klucza
    $klucz = substr(md5(microtime()),0,8);
    $hashed = md5($row[haslo].$klucz);
    $_SESSION["haslo"]=$hashed;
    mysql_query("UPDATE uzytkownik SET klucz='$klucz', hash='$hashed' WHERE login='$login';");

    People who fear free software are those
    whose products are worth even less

    1. hmm , kubazzz 12/02/09 22:54
      to pominąłęm w opisie w sumie, ale ja w swoich założeniach wzialem to pod uwage i przy rejestracji uzytkownika, haslo jest hashowane whirlpool'em. i w bazie danych sa tylko hashe hasel.
      i kiedy przy logowaniu uzytkownik podaje haslo, w formularzu, to przed porownaniem jest ono tez hashowane.

      Do tego mialem koncepcje, ze jest tablica z danymi sesji tylko:

      ses_id / login / ses_hash / ses_browser

      Żeby nie opierać się na zmiennej $_SESSION bo to przepada jak zamkniesz przeglądarkę.
      A ja chcę, żeby użytkownika zapamiętało. Dlatego racze cookies 'recznie' ustawiane.

      ten ses_hash to byłby jakis hash [np md5($login.microtime())] inny niż hash hasła.

      W tym co podałeś troche się gubię, bo strasznie dużo zmiennych jest.

      SM-S908

    
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL