Zabezpečenie skriptu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zabezpečenie skriptu – PHP – Fórum – Programujte.comZabezpečenie skriptu – PHP – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1602 příspěvků
6. 10. 2016   #1
-
0
-

Ahoj, ako by ste vhodne zabezpečili tento PHP script napríklad pre SQL injection, alebo XSS, robí sa to aj s HTMLspecialchars? :) Ďakujem za odpovede, prípadne za korektne upravený zdroják.
 PHP kód:

 <?php  
include("functions.php");
session_start();

if(isset($_POST['odoslat'])){   

    $username = ($_POST['username']);
    $password = ($_POST['password']);
    $login_check = mysqli_query($con,"SELECT `id` FROM `user` WHERE `username`='$username' AND `password`='".sha1($password)."'") or die (mysqli_error($con));
    if(mysqli_num_rows($login_check) == 0){
      $echo = "Nesprávna kombinácia mena/hesla!";
    }else{
      $activated_check = mysqli_query($con,"SELECT `activated` FROM `user` WHERE `username`='$username' AND `password`='".sha1($password)."'") or die (mysqli_error($con));
      $activated = mysqli_fetch_assoc($activated_check);
      if($activated['activated'] == 0){
        $echo = "Tento účet ešte nebol aktivovaný!";
      }else{
        $get_id = mysqli_fetch_assoc($login_check);
        $_SESSION['uid'] = $get_id['id'];
        
       header("Location: main.php");
        $t = file_get_contents("prihlasenia.txt");
      $today = date("Y-m-d H:i:s");
      $t .= $today." Používateľ ".$username." "."sa prihlásil!"."\r\n";
      file_put_contents("prihlasenia.txt",$t);
      }       
    }
  }
  ?>

HTML kód:  

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" name="login" id="form-login">

<br />
<input  type="text" name="username"  alt="username" placeholder=Meno style="width:100%" />

<input type="password" name="password"  size="18" alt="password" placeholder=Heslo style="width:100%" />

<button type="submit" name="odoslat" class="xmiddle blue button round">Prihlásiť!</button>
</fieldset>
<ul>
<li>
<a href="register.php">Vytvoriť účet</a>
</li>
</ul>
</form> 
Nahlásit jako SPAM
IP: 84.16.53.–
Kit+15
Guru
7. 10. 2016   #2
-
0
-

#1 Martin
Funkce htmlspecialchars() se k tomuto účelu vůbec nehodí.

Mělo by stačit nahradit 2 řádky tímto: 

$username = mysqli_real_escape_string($con, $_POST['username']);
$password = mysqli_real_escape_string($con, $_POST['password']);
Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
7. 10. 2016   #3
-
0
-

#2 Kit
Ďakujem pekne, idem to hneď aplikovať. Do akých situácii sa podľa vás hodí Htmlspecialchars? a čo sql injection?

Nahlásit jako SPAM
IP: 84.16.53.–
Kit+15
Guru
7. 10. 2016   #4
-
0
-

#1 Martin
Ještě koukám, že to i loguješ a nejspíš vypisuješ do HTML. Tam už htmlspecialchars() patří. Do databáze však nikdy.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
7. 10. 2016   #5
-
0
-

#3 Martin
SQL Injection přece řeší funkce mysqli_real_escape_string().

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
7. 10. 2016   #6
-
0
-

Správne už rozumiem, je teraz skript zabezpečený dostatočne? nemalo by sa niečo pridať aj do query? 

Nahlásit jako SPAM
IP: 84.16.53.–
Kit+15
Guru
7. 10. 2016   #7
-
0
-

#6 Martin
Však už jsme přidali, ne?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
7. 10. 2016   #8
-
0
-

   

$login_check = mysqli_query($con,"SELECT `id` FROM `user` WHERE `username`='$username' AND `password`='".sha1($password)."'") or die (mysqli_error($con));

Tu už netreba pridať nič? 

Nahlásit jako SPAM
IP: 84.16.53.–
Kit+15
Guru
7. 10. 2016   #9
-
0
-

#8 Martin
Co bys chtěl přidávat? $username a $password už máme zabezpečené, viz výše.

Možná bych spíš něco ubral, protože $password není nutné zabezpečovat 2×: 

$username = mysqli_real_escape_string($con, $_POST['username']);
$password = sha1($_POST['password']);

$login_check = mysqli_query($con, "SELECT `id` FROM `user`
    WHERE `username`='$username' AND `password`='$password'")
    or die (mysqli_error($con));

Na ukládání hesel jsou i lepší způsoby, ale to je další kapitola.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

MySQL zabezpečenie — založil Thew

Restart skriptu — založil Matej Zabsky

Kompilace skriptů — založil Prasklej Talíř

Princip skriptu — založil MaxDJs

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý