Autor Zpráva
Sobky
Profil
Dobrý deň!
Prosím Vás ako mám spraviť aby si internet zapamätal prihlásenie?
Mám tento script:
<?php
   $server = "localhost";
   $dbuser = "saffasfafa7";
   $dbpass = "dsafghj";
   $dbname = "asfgshbs";
   
$mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname");
$query="SELECT pass FROM administration";
$result = mysqli_query($mysqli, $query);
while($row = mysqli_fetch_array($result)) {
$heslicko = $row['pass'];    
}

if(isset($_POST['submit'])){
  $heslo = $_POST['heslo'];
  $heslo = md5($heslo);
  if($heslo == $heslicko) {
    include('administracia.php');
    exit();
  }
}
?>
<html xmlns='http://www.w3.org/1999/xhtml' lang='sk'>
    <head>
        <title>Invite list</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="author" content="SobkyLuckSK">
        <link rel="stylesheet" type="text/css" href="css/admin.css">
        <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    </head>
<body>
<img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png">
<form action="" method="POST">
  <fieldset class="table">
    <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend>
    <table width="100%">
    <tr>
      <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td>
    </tr>
    <tr>
      <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td>
    </tr>
    <tr>
      <td colspan="4" align="center"><input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td>
    </tr>
    </table>
  </fieldset>
</form>
</body>
</html>
Fisir
Profil
Reaguji na Sobkyho:
Buď pomocí sessions, nebo cookies.
Taps
Profil
Sobky:
použití cookies - http://pecan.cz/index.php?id=42&n=prace-s-cookies
Skilerko123
Profil
Sobky sprav to cez podmienku ak bude zaškrtnuté zapamätal prihlásenie nastav cookie na týžden napríklad ak nie daj to na hodinu a hotovo :)
Sobky
Profil
A kde to mám umiestniť v tom scripte?
jenikkozak
Profil
Před příkaz include na 18. řádku.
Sobky
Profil
Len keby som vedel čo tam mam napísať. Z toho sessions a cookies som upne vypečený. Už som čítal xy stránok o tom ale stále tomu nechápem
Davee
Profil *
Já používám něco takového
   if(isset($_POST['remember'])){
      setcookie("cookname", $_SESSION['ucet'], time()+60*60*24*100, "/");
      setcookie("cookpass", $_SESSION['heslo'], time()+60*60*24*100, "/");
   }
Sobky
Profil
iba toto? a funguje to? INak v tom $_session ten ucet a heslo tak možem dať hocičo alebo podla niečoho je to určené?
Skilerko123
Profil
Davee ktorý ... ukladá heslo do cookie ?? Sprav to takto :

<?php if (isset($_save)){
setcookie("cookname", $_SESSION['ucet'], time()100, "/");
}
else{
setcookie("cookname", $_SESSION['ucet'], time()22222222222, "/");
}


?>
    

Do času si daj svoje parametre ja som tam hodil blaol takže :)
Sobky
Profil
Tak by to potom vyzeralo takto?:
<?php
   $server = "localhost";
   $dbuser = "ASDFG";
   $dbpass = "SAFDGHFF";
   $dbname = "asdgfh";
   
$mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname");
$query="SELECT pass FROM administration";
$result = mysqli_query($mysqli, $query);
while($row = mysqli_fetch_array($result)) {
$heslicko = $row['pass'];    
}

if(isset($_POST['submit'])){
  $heslo = $_POST['heslo'];
  $heslo = md5($heslo);
  if($heslo == $heslicko) {
      if(isset($_POST['remember'])){
      setcookie("cookname", $_SESSION['ucet'], time()+60*60*24*100, "/");
      setcookie("cookpass", $_SESSION['heslo'], time()+60*60*24*100, "/");
   }
    include('administracia.php');
    exit();
  }
}

?>
<html xmlns='http://www.w3.org/1999/xhtml' lang='sk'>
    <head>
        <title>Invite list</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="author" content="SobkyLuckSK">
        <link rel="stylesheet" type="text/css" href="css/admin.css">
        <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    </head>
<body>
<img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png">
<form action="" method="POST">
  <fieldset class="table">
    <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend>
    <table width="100%">
    <tr>
      <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td>
    </tr>
    <tr>
      <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td>
    </tr>
    <tr>
      <td colspan="4" align="center"><input type = "checkbox" name = "remember" >Pamätaj si ma<input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td>
    </tr>
    </table>
  </fieldset>
</form>
</body>
</html>
mimochodec
Profil
Sobky:
$mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname");

Uvozovky tady nemají co dělat. Bohužel to lze a funguje to. Je to ale nadbytečné.

Dále: zamysli se, jak ten skript funguje. Na začátku si sáhneš do databáze pro $heslicko. Až potom testuješ $_POST. Pokud formulář odeslán nebyl a $_POST['submit'] je prázdný, k čemu $heslicko potřebuješ? K ničemu a celý ten dotaz je zbytečný. Dej ho dovnitř do toho if.

Dále: zdá se, že máš v databázi jedno heslo a nerozlišuješ uživatele. Určitě nepotřebuješ dát přístup více lidem? Nebudeš to potřebovat ani v budoucnu? Víš to s naprostou jistotou? Pokud tu jistotu nemáš, udělej si tabulku users, do ní přidej jednoho člověka. Je to jen minimum práce navíc a až budeš chtít někoho přidat, nebudeš muset skript přepisovat, jen přidáš položku do databáze.
Sobky
Profil
NO tak som to trochu upravil. Len ja stále neviem prísť na ten princíp toho aby si ma to pamatalo. Proste prihlásim sa a som prihlásený dokým sa neodhlásim alebo nezavriem stránku. Ale ked ju obnovím tak aby som bol stále prihlásený. To stým if remember je asi zle ale ide to :D
<?php
   $server = "localhost";
   $dbuser = "ssadsadd";
   $dbpass = "adegy";
   $dbname = "yadsffds"; 
 
if(isset($_POST['submit'])){
    $nick = $_POST['nick'];
    $mysqli = new mysqli("$server", "$dbuser", "$dbpass", "$dbname");
    if (mysqli_connect_errno()) {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    $query = "SELECT admin, pass FROM administration WHERE admin = '".$nick."'";
    $result = mysqli_query($mysqli, $query);
    while($row = mysqli_fetch_array($result)) {    
          $heslicko = $row['pass'];
        $meno = $row['admin'];
          $heslo = $_POST['heslo'];
          $heslo = md5($heslo);
        if($nick == $meno) {
              if($heslo == $heslicko) {
                  if(isset($_POST['remember'])){
                  setcookie("cookname", $_SESSION['nick'], time()+60*60*24*100, "/");
                  setcookie("cookpass", $_SESSION['heslo'], time()+60*60*24*100, "/");
                include('administracia.php');
                    exit();
                }else{
                include('administracia.php');
                    exit();
                }
              }
        }
    }
}

?>
<html xmlns='http://www.w3.org/1999/xhtml' lang='sk'>
    <head>
        <title>Invite list</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="author" content="SobkyLuckSK">
        <link rel="stylesheet" type="text/css" href="css/admin.css">
        <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    </head>
<body>
<img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png">
<form action="" method="POST">
  <fieldset class="table">
    <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend>
    <table width="100%">
    <tr>
      <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td>
    </tr>
    <tr>
      <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td>
    </tr>
    <tr>
      <td colspan="4" align="center"><input type = "checkbox" name = "remember" >Pamätaj si ma<input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td>
    </tr>
    </table>
  </fieldset>
</form>
</body>
</html>
jenikkozak
Profil
Do cookie určitě neukládej heslo, ale nějaký token (náhodně vygenerovaný řetězec), podle kterého pak ověříš pravost přihlášeného uživatele. Obsah souborů cookie se totiž s každým požadavkem posílá na server a může si ho přečíst každý, kdo má přístup k počítači uživatele.

Pak budeš mít cookii u uživatele uloženou, ale její obsah musíš také na serveru přečíst. K tomu využiješ superglobální proměnnou $_COOKIE. Pokud bude její hodnota existovat, budeš uživatele považovat za přihlášeného a zobrazíš mu tu administraci.
Kubo2
Profil
Sobky, skús si ten skript pri každej úprave prejsť a zamyslieť sa nad tým, čo robí, prečo to robí takto a čo približne v ňom chýba, aby robil niečo ďaľšie, čo od neho požaduješ.
Pokús sa rozmýšľať s nadhľadom ponad tú spleť príkazov. Aby si sa stal programátorom, nie je potrebné ovládať kompletnú sadu príkazov alebo syntax nejakého programovacieho jazyka. Musíš sa naučiť myslieť a formulovať svoje myšlienky tak, aby sa dali ihneď zapísať ako program, bez ohľadu na programovací jazyk (ten jazyk je iba prostriedok na vyjadrenie programátorových myšlienok v podobe programu daného programovacieho jazyka). Toto sa však bohužiaľ nikde neučí. Nazýva sa to programátorským myslením.
Jan Tvrdík
Profil
Sobky:
Dovolím si dvě poznámky ohledně bezpečnosti:

1) Skript je obsahuje SQL injection zranitelnost, protože neošetřuje vstupy, které posílá do databáze. Použij funkci mysqli_real_escape_query.

2) Funkce md5 není vhodná pro hashování hesel, viz dokumentace PHP. Použij radši funkce password_hash a password_verify.
Sobky
Profil
Ja stále tomu cookie nechápem :( Ako si ma to zapamatá?
A Jan Tvrdík
To 1. Nechápem, čo mám nahradiť v tom kóde. To row[]...?? 4i niečo iné?
A to pass_hash... to funguje parádne Ďakujem. A ako som pochopil tak to md5 sa dá asi lahšie rozšifrovať nie?
lionel messi
Profil
Sobky:
A ako som pochopil tak to md5 sa dá asi lahšie rozšifrovať nie?
U funkcie md5 je (oveľa) jednoduchšie nájsť kolízny reťazec (to jest nájsť 2 rôzne reťazce s rovnakým hashom). MD5 je hashovacia funkcia, nie šifra a myslím, že nikdy nebola na hashovanie hesiel navrhnutá. Hash je iba „odtlačok“ hesla, na rozdiel od šifry nie je z neho možné získať pôvodné heslo.

Nechápem, čo mám nahradiť v tom kóde. To row[]...?? 4i niečo iné?
Riadok 13 (možno aj niečo iné, len som to preletel):
$query = "SELECT admin, pass FROM administration WHERE admin = '". mysqli_real_escape_string($mysqli, $nick)."'";

Použiť ošetrenie proti SQL injection v row[] je podľa mňa zbytočné.

Ešte si dovolím 2 technické pripomienky:
1. Mixovať objektový a procedurálny prístup k DB je možné, ale neprehľadné.
2. Na riadku 9 sú úplne zbytočne použité úvodzovky okolo premenných, viď: Nejčastější potíže s PHP (FAQ) » Co dávat a co nedávat do uvozovek
Sobky
Profil
Čo ste mi povedali tak to som sa snažil pomeniť a konečne som sprejazdnil to prihlásenie. Spravil som to so session. Ďakujem všetkým za pomoc!
<?php
   $server = "asfgeegs";
   $dbuser = "asfsfasf";
   $dbpass = "asffsafsa";
   $dbname = "sddsasdfsa";

if(isset($_POST['submit'])){
    $nick = $_POST['nick'];
    $mysqli = new mysqli($server, $dbuser, $dbpass, $dbname);
    if (mysqli_connect_errno()) {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    $query = "SELECT admin, pass FROM administration WHERE admin = '". mysqli_real_escape_string($mysqli, $nick)."'";
    $result = mysqli_query($mysqli, $query);
    while($row = mysqli_fetch_array($result)) {    
          $heslicko = $row['pass'];
        $hash = $heslicko;
        $meno = $row['admin'];
          $heslo = $_POST['heslo'];
          $hesloo = password_verify($heslo, $hash);
        if(($nick == $meno)&&($hesloo == $heslicko)) 
        {
            session_start();
            header("Cache-control: private");
            $_SESSION["logged"] = 1;
            header("Location: administracia.php");
                exit;
        }
    }
}

?>
<html xmlns='http://www.w3.org/1999/xhtml' lang='sk'>
    <head>
        <title>Invite list</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="author" content="SobkyLuckSK">
        <link rel="stylesheet" type="text/css" href="css/admin.css">
        <script type="application/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    </head>
<body>
<img class="logo" src="http://www.magicraft.4fan.cz/wp-content/uploads/2014/06/MAGICRAFT-3.png">
<form action="" method="POST">
  <fieldset class="table">
    <legend><p style="font-size: 2em; color: gold; font-weight: bold">Administrácia</p></legend>
    <table width="100%">
    <tr>
      <td width="80%" align="center"><input type="text" class="nick" name="nick" tabindex="1" size="25" placeholder="Admin"></td>
    </tr>
    <tr>
      <td width="80%" align="center"><input type="password" class="heslo" name="heslo" tabindex="2" size="25" placeholder="Heslo"></td>
    </tr>
    <tr>
      <td colspan="4" align="center"><input type="submit" name="submit" class="tlacitko" value="Prihlásiť" tabindex="3"></td>
    </tr>
    </table>
  </fieldset>
</form>
</body>
</html>
lionel messi
Profil
Sobky:
Už len posledná chybička na kráse: ešte by som riadok 9 zmenil na procedurálny štýl, kt. používaš vo zvyšku kódu:

$mysqli = mysqli_connect($server, $dbuser, $dbpass, $dbname);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0