Divi jautājumi par PHP. | Notepad.lv


Divi jautājumi par PHP.



autors: guitarman

Atbildēt | Sūtīt vēstuli | |

Čau visiem,
Taisu loginu iekš php. Viss tākā būtu ok, tikai lieta tāda ka mans logins neatšķir LV burtus kā arī CAPS. Respektīvi ja man ir lietotājs ar niku 'ansis', viņš var ielogoties arī kā 'ANSIS' vai arī kā 'ĀŅŠĪŠ'. Ok, tie caps var palikt, jo tik un tā negribas divus lietotājus ar vienādu vārdu, tikai vienam ir CAPS, otram nav. Bet gribētos lai logins atšķir garumzīmes un mīkstinājuma zīmes. Kādi ir varianti?

Ā un vēl pie viena - kas iesācējam būtu jāzin par drošu Cookies lietošanu? Piemēram cik esmu sapratis tad vienkārši cookijā ielikt lietotāja id vai lietotāja vārdu nav prāta darbs? Hashot cookija satura vai kā?

Komentāri

  1. Mad182 : 18 Jūlijs 2010 18:44:42 AtbildētProfilsSūtīt vēstuli

    1) Saliec visur normālu unikoda kodējumu un nebūs nekādu problēmu ar garumzīmēm.

    2) Loginu taisīt uz cepumiem manuprāt vispār nav ne prātīgi ne ērti, apskaties sesijas.
    _________________
    100% Microsoft free

  2. guitarman : 18 Jūlijs 2010 18:56:39 AtbildētProfilsSūtīt vēstuli

    Mad182 - visur ir unikoda kodējums..

    Vai tad ar sesijām var panākt, ka lietotājs pēc browsera aizvēršanas un pēc tam atkal atvēršanas ir pieslēdzies?
    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

  3. Mad182 : 18 Jūlijs 2010 18:58:06 AtbildētProfilsSūtīt vēstuli

    Nu priekš "atcerēties mani" funkcijas var izmantot cepumus, bet tur tā pat glabāsies tikai kaut kāds identifikators, nevis lietotāja parole. Tā pat sesijas var glabāt dažādi un var arī laiku dažādu norādīt.

    Un ja būtu visur unikods, tad nebūtu šādas problēmas
    _________________
    100% Microsoft free

  4. guitarman : 18 Jūlijs 2010 19:06:03 AtbildētProfilsSūtīt vēstuli

    Nu man ir utf-8 norādīts iekš <meta> tagiem, kā arī datubāzes konekcijas laikā norādīts lūk šis:

    mysql_query("SET NAMES utf8", $db_connection);
    mysql_query("SET CHARACTER SET utf8", $db_connection );

    Kur vēl vajag?
    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

  5. Mad182 : 18 Jūlijs 2010 19:07:33 AtbildētProfilsSūtīt vēstuli

    Kāds ir kodējums pašai SQL tabulai?
    _________________
    100% Microsoft free

  6. guitarman : 18 Jūlijs 2010 19:11:11 AtbildētProfilsSūtīt vēstuli

    datubāzei un tabulai ir utf8_unicode_ci...
    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

  7. Mad182 : 18 Jūlijs 2010 19:12:15 AtbildētProfilsSūtīt vēstuli

    Pamētģini nomainīt uz utf8_latvian_ci
    _________________
    100% Microsoft free

  8. guitarman : 18 Jūlijs 2010 19:17:52 AtbildētProfilsSūtīt vēstuli

    Pamēģināju, bet nekā nesanāca..
    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

  9. Creep : 18 Jūlijs 2010 19:18:08 AtbildētProfilsSūtīt vēstuli

    EDIT: bišķin saputrojos.
    P.S. http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

  10. Mad182 : 18 Jūlijs 2010 19:19:46 AtbildētProfilsSūtīt vēstuli

    Creep, nē, runa ir par mysql vaicājumu, kur paprasot "glāžšķūņrūķīši" tiek atgriezts arī "glazskunrukisi"

    Laikam kļūdījos, un tik vienkārši vis nav. Aspkaties te: http://php.lv/f/topic/12540-mysql-un-like/

    Cita lieta - vai vispār vajag, lai var piereģistrēties divi dažādi lietotāji - "Ansis Abele" un "Ansis Ābele"?
    _________________
    100% Microsoft free

  11. Creep : 18 Jūlijs 2010 19:22:45 AtbildētProfilsSūtīt vēstuli

    Mad: biju jau sapratis savu kļūdu un iemetu linku uz mysql lapu, ceru, ka palīdzes...

  12. guitarman : 18 Jūlijs 2010 19:22:48 AtbildētProfilsSūtīt vēstuli

    Nu logins beisiklī izskatās šādi:

    Kods:

    if (isset($_POST["submit"])) {

    $username = trim(addslashes($_POST["username"]));
    $password = trim(addslashes($_POST["password"]));
    $hashed_password = sha1($password);

    $result_username = mysql_query("SELECT * FROM users WHERE username = '$username' ");
    $result_password = mysql_query("SELECT * FROM users WHERE password = '$hashed_password' ");

    if (mysql_num_rows($result_username) == 0) {
    echo "Šāds lietotājs neeksistē";
    }
    elseif (mysql_num_rows($result_username) == 1 && mysql_num_rows($result_password) == 0 ) {
    echo "Nepareiza parole";
    }
    else {

    $lcode1 = rand(11111111,99999999);
    $lcode2 = $hashed_password;
    $login_code = $lcode1.$lcode2;

    mysql_query("UPDATE users SET login_code = '$login_code' WHERE username = '$username' AND password = '$hashed_password' ");
    $result = mysql_query("SELECT * FROM users WHERE login_code = '$login_code' ");
    $row = mysql_fetch_array($result);
    $login_code = $row["login_code"];

    setcookie("troksnis", $login_code, time()+7200);
    header("Location: index.php");
    }

    }

    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

  13. guitarman : 18 Jūlijs 2010 19:25:52 AtbildētProfilsSūtīt vēstuli

    Ok, paldies jums abiem. Biki skaidrāks tiku..
    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

  14. Creep : 18 Jūlijs 2010 19:28:39 AtbildētProfilsSūtīt vēstuli

    1) Skatīt linku.
    2) Gadiem ilgā bezdarbība ir man likusi kautko svarīgu aizmirst vai arī vienkārši es nespēju izprast, kāpēc lietotājvārdu un paroli nevarēja likt vienā vaicājumā?

  15. Mad182 : 18 Jūlijs 2010 20:10:32 AtbildētProfilsSūtīt vēstuli

    Hmm, kāpēc Tu glabā paroles hešu iekš cookie? Tas nav pareizi un šajā gadījumā ir pilnīgi bezjēdzīgi.
    _________________
    100% Microsoft free

  16. root : 18 Jūlijs 2010 20:24:49 AtbildētProfilsSūtīt vēstuli

    Tas varbūt ir overkill, bet es vispār pēdējā laikā visus useru datus kodēju ar aes rijndael. Un cookijos glabāju authashu no statiskiem mainīgajiem, tur IP utml, kurus ir diezgan pagrūti nospoofot. Bet paroles hashu likt cookijā ir ļoti pat stulbi, nekad to nevajag darīt ;) Tāda šņaga bija arī PHBB lidz to izlaboja, kas deva ļaunprātim iespēju tikt pie admina tiesībām. Cookijā vispār nevar glabāt ne lietotāju ne paroli, jo users var nomainīt lietotāja vārdu iekš kuukija un pie vaji projektētas sistēmas atkal tikt pie admina privilēģijām, piemēram situācija kad identificējas users ar cookie, skripts paņem no bāzes adminu listi un attiecīgi iešķiebj admina tiesības, ja vel sesijā tiek norādīts statisks variablis, kas norāda uz to ka autorizācija ir veikta un paroli parbaudit nevajag, tad vispār admina iespējas iegūt ir elementāri. Daudzi uz šito iekrīt vispār.
    Ja gribi glabāt lietotāja datus kūkijos, tev ar kādu algoritmu vajadzetu piedomāt pie šo datu kodēšanas tajā pašā AES ja pieejams mcrypt paplašinājums, piemēram to pašu rijndael. Protams ka atkal nākas izmantot hard coded statisku atslēgu, vai arī authhashu no ip utml datiem. Bet plainā glabāt šos datus ir idiotisms.
    _________________
    #IP Over Avian Carriers
    #Every language has an optimization operator. In C++ that operator is ‘//’

  17. guitarman : 18 Jūlijs 2010 20:34:28 AtbildētProfilsSūtīt vēstuli

    Ok, liels paldies par padomiem !
    Mad - neesmu vēl tik gudrs, tāpēc mēģināju tos kūkijus padarīt cik vien drošus var ar savām zināšanām.
    Bet tad vēl jautājums - ko īsti kūkijā būtu droši likt no lietotāja datiem? kā sapratu tad ar vienkāršu random ciparu kurš stāv datubāzē kamēr lietotājs ir pieslēdzies, nepietiks..
    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

  18. root : 18 Jūlijs 2010 20:53:48 AtbildētProfilsSūtīt vēstuli

    Glabāt jau tur var jebko. Vienkārši attiecīgi nokodē.
    http://php.net/manual/en/book.mcrypt.php
    _________________
    #IP Over Avian Carriers
    #Every language has an optimization operator. In C++ that operator is ‘//’

  19. Mad182 : 18 Jūlijs 2010 21:12:20 AtbildētProfilsSūtīt vēstuli

    Nu ja tev vajag vairāk vai mazāk "nejaušu" autorizācijas stringu, tad uztaisi kaut vai md5 no time un vēl kaut kā, bet ne jau paroli, bet to patiešām būtu vienkāršāk darīt ar sesiju un nekādus stringus ģenerēt arī nevajadzētu, jo php pats tev to sesijas id izdomās. Sesijās kaut ko glabāt ir krietni vien drošāk kā cepumos, jo dati glabājas uz servera, un pašam lietotājam ir tikai sesijas id, ko pie tam zagt ir diezgan bezjēdzīgi. Un arī tur, bai ze vei, nav nekādas vajadzības glabāt paroles hešu.
    _________________
    100% Microsoft free

  20. Creep : 19 Jūlijs 2010 14:59:47 AtbildētProfilsSūtīt vēstuli


    Kods:
    $lcode1 = rand(11111111,99999999);
    $lcode2 = $hashed_password;
    $login_code = $lcode1.$lcode2;

    mysql_query("UPDATE users SET login_code = '$login_code' WHERE username = '$username' AND password = '$hashed_password' ");
    $result = mysql_query("SELECT * FROM users WHERE login_code = '$login_code' ");
    $row = mysql_fetch_array($result);
    $login_code = $row["login_code"];

    setcookie("troksnis", $login_code, time()+7200);

    Nesapratu, kur jūs izrāvāt, ka paroles hašs tiek glabats kūkijos? Šeit tiek ģenerēts random strings, kas arī tiek iemests datubāzē kā identifikācijas nummurs un tas ari tiek lietots kūkijam, viss ir bumbās. Cilvekam droši vien, ka galvu sajaucāt.
    No otras puses piekritīšu Mad, daudz vienkāršāk to visu butu panākt ar sessijām...
    http://php.net/manual/en/features.sessions.php
    P.S. Ja gribi maksimālu drošību, tad uztaisi, lai, pieņemsim, reizi divās stundās tiek veikta veco kodu dzēšana no datubazes...

  21. daGrevis : 19 Jūlijs 2010 16:55:35 AtbildētProfilsSūtīt vēstuli

    Ar cepumiem jāsak ņemties būs tad, kad gribēsi "Remember me!" funkciju... =) Tagad - sesijas. =)
    _________________
    Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/

    http://twitter.com/#!/daGrevis
    http://last.fm/user/daGrevis
    http://ask.fm/daGrevis

    http://dagrevis.lv/

Pievienot komentāru




Digitālās foto kamerasDigitālās foto kameras
  • Saistītās tēmas