Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Bezpieczeństwo sesji i przekazywania danych do metod
Forum PHP.pl > Forum > Przedszkole
Szymciosek
Witam,
czy takie działanie jest bezpieczne ?

W login.php do sesji zapisuję Id aktualnie zalogowanego użytkownika.
  1. $_SESSION['user_id'] = $user_id;


Następnie przy dodawaniu wpisu do bazy wyświetlam formularz i jeśli wszystko jest ok, wysyłam go.

coś w tym rodzaju.
addEntry.php
  1. if (!isset($_SESSION['logged']))
  2. die ('Zaloguj sie!');
  3.  
  4. if (isset($_POST['add']))
  5. {
  6. if (isset($_POST['message']))
  7. {
  8. $connect = new Connect;
  9. $connect->addEntryQuery($_SESSION['user_id'], $_POST['message']);
  10. //walidacja danych
  11. header("Location: thanks.php");
  12. }
  13. else
  14. {
  15. echo 'uzupelnij pola';
  16. }
  17. }
  18. else
  19. {
  20. echo '<form action="" method="post">
  21. <textarea cols="25" rows="5" name="message"></textarea><br />
  22. <input type="submit" name="add" value="dodaj" />
  23. </form>';
  24. }


Następnie te dane są przekazywane do klasy Connect

Connect.php
  1. class Connect
  2. {
  3. private static $PDOInstance;
  4.  
  5. public function __construct()
  6. {
  7. if(!self::$PDOInstance) {
  8. try
  9. {
  10. self::$PDOInstance = new PDO('mysql:host=localhost; dbname=accept_system', 'root', '');
  11. self::$PDOInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  12.  
  13. }
  14. catch (PDOException $e)
  15. {
  16. die('PDO CONNECTION ERROR: ' . $e->getMessage() . '<br/>');
  17. }
  18. }
  19. return self::$PDOInstance;
  20. }
  21.  
  22. public function addEntryQuery($user_id, $content)
  23. {
  24. $query = self::$PDOInstance->prepare("INSERT INTO `contents` (`id`, `user_id`, `content`) VALUES ('', :user_id, :content)");
  25. $query->bindValue(":user_id", $user_id);
  26. $query->bindValue(":content", $content);
  27.  
  28. $query->execute();
  29. }
  30. }
CuteOne
Jeżeli nie trzymasz w sesji danych wrażliwych (loginu, hasła itp) to Twój sposób jest jak najbardziej poprawny. Jedyne do czego, można się przyczepić to zapytanie do bazy w klasie, która ma się z nią tylko połączyć
Szymciosek
Aż tak bardzo można się do tego przyczepić ? Myślałem, że skoro robię instancję klasy Connect, to śmiało mogę w niej wywołać potrzebne metody.

Przy okazji zapytam, bo chciałbym umieścić w pliku menu.php (taki mój header) informację o username czyli ten login. Tylko teraz skoro mam tego nie trzymać w sesji to co ? Token w bazie, token do sesji i porównywać i na tej zasadzie pobierać bezpiecznie dane z bazy i wtedy je wyświetlać ?
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.