Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zabezpieczanie skryptów
Forum PHP.pl > Forum > Przedszkole
koptus
Chciałbym jak najlepiej zabezpieczyć moje skrypty, nie wiem czy użyć htmlspecialchars czy addslashes, różnice znam, pytanie tylko, które kiedy zastosować, czy przy czytaniu rekordow z bazy, czy przy formularzach POST, czy jak dostaje informacje metoda GET?
RafaelX
addslashes powinno sie dawać przy wszystkim co wchodzi w skład zapytania i co jest napisane przez użytkoownika
piotrooo89
przy bazie danych zainteresuj sie mysql_real_escape_string
kefirek
Przy dodawaniu do bazy użyj
mysql_real_escape_string

Prz odbieraniu danych z formularza sprawdzaj co użytkownik przesyła np czy podaje poprawny emial
  1. <?php
  2. if (!preg_match("/^[-0-9A-Z_.]{1,50}@([-0-9A-Z_.]+.){1,50}([0-9A-Z]){2,4}$/i", $_POST['emial'])) {
  3. echo 'Nie poprawny emial';
  4. }
  5. ?>


Przy $_GET sprawdzasz także typ danych np czy zmienna jest liczbą odraz czy istniej i jeśli nie przekierowujesz na gówna stronę ( np gdy przekazujesz id kategorii a ktoś zamiast liczby wstawi coś innego)
  1. <?php
  2. if (!isset($_GET['test']) || !preg_match("/^[0-9]+$/", $_GET['test']) { header("Location: ".str_replace("&amp;", "&", "index.php"); }
  3. ?>


Używaj także trim do usuwanie spacji

Sprawdzasz czy np podasz rejestracji nazwa uzytkownika jest poprawna czy uzytkownik nie podał nie dozlownych znaków itp

Możesz też użyć strip_tags

Możesz użyc do spradzania danych z formualrza takiej funkcji
  1. <?php
  2. function sprawdz($dane) {
  3. $dane = trim($dane);
  4. if (get_magic_quotes_gpc()) $dane = stripslashes($dane);
  5. $dane = htmlspecialchars($dane, ENT_QUOTES);
  6. return $dane;
  7. }
  8. ?>


Możesz tez uzyc takiej funckji do zamiany nie pożadanych znaków
Kod
<?php
function znaki($text) {
if (magic_quotes_gpc()) $text = stripslashes($text);
$szukaj = array("&", "\"", "'", "\", '\"', "\'", "<", ">", "&nbsp;");
$na = array("&amp;", "&quot;", "'", "\", "&quot;", "", "&lt;", "&gt;", " ");
$text = str_replace($szukaj, $na, $text);
return $text;
}
?>
koptus
Postępowałem zgodnie z manualem i chciałem się zapytać czy w takim razie zapytanie powinno wygladać tak:

  1. <?php
  2. $login = $_POST['login'];
  3. $pass = $_POST['pass'];
  4.  
  5.  $query = "SELECT * FROM uzytkownicy " .
  6.           "WHERE login = '%s' " .
  7.           "AND pass = '%s'",
  8.           mysql_real_escape_string($login),
  9.            mysql_real_escape_string($pass);
  10. ?>
kefirek
  1. <?php
  2. $login = trim($_POST['login']);
  3. $pass = trim($_POST['pass']);
  4. $query = mysql_query("SELECT * FROM uzytkownicy WHERE login='".mysql_real_escape_string($login)."' AND pass='".mysql_real_escape_string($pass)."'");
  5. ?>
bełdzio
http://www.beldzio.com/kategoria/bezpieczenstwo
koptus
Jeszcze się chciałem spytać, co robić jeśli w niektórych danych wysyłanych muszą być spację np. "Opis" albo jakieś pole "O mnie". Co robić wtedy? trim() usunie mi wszystkie spacje, a to niezbyt wchodzi w grę, w takich sytuacjach dawać htmlspecialchars lub addslashes? Czy trim() chroni mnie przed próbą rozjechania strony jakimś kodem?
Spawnm
przed kodem html/js to htmlspecialchars() , przed długim stringiem bez spacji to wordwrap() , przed sql injection mysql_real_escape_string()
bełdzio
w przypadku ytf8
  1. <?php
  2. $var = htmlspecialchars( strip_tags( $var ), ENT_QUOTES, 'UTF-8' );
  3. ?>
w przypadku nie utf8 bez ostatniego parametru smile.gif co do trim( ) to usuwane sa tylko skrajne spacje a nie wszystkie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.