Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] bezpieczeństwo
Forum PHP.pl > Forum > Przedszkole
peter13135
czytałem conieco w manualu o mysql_real_escape_string (nawet po polsku jest opis:))
jednak jako początkujący webmasjter, niebardzo to rozumiem, więc mam pytanie
czy poniższy skrypt jest bezpieczny??


  1. <?
  2. //formularz
  3. //łączenie z bazą
  4. // jeśli wypełniono dane w formularzu
  5.  
  6. $login=$_POST['login'];
  7. $haslo=$_POST['haslo'];
  8. $login=mysql_real_escape_string($login);
  9. $haslo = mysql_real_escape_string($haslo)
  10.  
  11.  
  12. {
  13.  $sql=mysql_query("select * from userzy where login='$login' and haslo='$haslo' ");
  14.  }
  15. ?>


cały ten kod jest pisany "z palca", chce sie tylko dowiedzieć czy takie filtrowanie zmiennych jest bezpieczne, czy to wogóle oto chodzi

edit:// jeszcze jedno
czy "sprintf" to jest to samo co mysql_query?
bełdzio
mysql_real_escape_string ma za zadanie uchronic przed SQL injection tak wiec wstepnie powyzszy kod jest ok, dlaczego wstepnie? bo dochodzi jeszcze kwestia filtrowania txt na wystepowanie znacznikow html

sprintf służy do formatowania stringa, mysql_query do wykonywania zapytan mySQL:)
peter13135
aha, czyli jak jeszcze te zmienne "przelece" przez htmlspecialchars to będdzie ok?
pyro
niom
bełdzio
Cytat(peter13135 @ 10.08.2008, 15:19:07 ) *
aha, czyli jak jeszcze te zmienne "przelece" przez htmlspecialchars to będdzie ok?

tak ale w odpowiedni sposób smile.gif zerknij tu -> http://www.beldzio.com/obsluga-html.freez
peter13135
dzięki za linka, ten artykuł rozjaśnił mi conieco sprawe
znalazłem tam takie coś
  1. <?php
  2. $zmienna = htmlspecialchars( strip_tags( $zmienna ), ENT_QUOTES, 'UTF-8' );
  3. ?>


problem w tym że mam strone na iso-8859-2 , więc ten kod ma wyglądać w ten sposób??

  1. <?php
  2. $zmienna = htmlspecialchars( strip_tags( $zmienna ), ENT_QUOTES, 'iso-8859-2');
  3. ?>


czy może wstarczy napisać poprostu takie cośquestionmark.gif
  1. <?php
  2. $zmienna = htmlspecialchars( strip_tags( $zmienna ), ENT_QUOTES, 'iso');
  3. ?>


i czy takie coś uchroni mnie zarówno przed html jak i xss?
bełdzio
jeśli korzystasz z iso to ostatni parametr mozesz pominac, a co do xss to dorzuc do tego strip_tags i powinno byc ok smile.gif
peter13135
napisałem taką funkcje...
  1. <?
  2. function zabezpiecz($zmienna)
  3. {
  4. $zmienna = htmlspecialchars( strip_tags( $zmienna ), ENT_QUOTES);
  5. $zmienna = mysql_real_escape_string($zmienna);
  6. if( strpos( $zmienna, 'script' )) {exit;} 
  7. }
  8. ?>


czy jest ona poprawna?
robos85
ja używam tego:
  1. <?php
  2. function sqlesc ($content) {
  3. $content = (! get_magic_quotes_gpc ()) ? mysql_real_escape_string ($content) : $content;
  4. return $content;
  5. }
  6. ?>

Czyli muszę do tego kodu dowalić htmlspecialchars" title="Zobacz w manualu PHP" target="_manual?
Shili
Jeśli nie zamierzasz tego nigdy wyświetlać na stronie, to nie. Jeśli zamierzasz, to jednak wypadałoby zabezpieczyć się przed xss.
Z tym że w przypadku magic quotes proponowałabym użyć stripslashes a następnie mysql_real_escape_string.
peter13135
Cytat(Shili @ 11.08.2008, 13:43:44 ) *
Jeśli nie zamierzasz tego nigdy wyświetlać na stronie, to nie. Jeśli zamierzasz, to jednak wypadałoby zabezpieczyć się przed xss.
Z tym że w przypadku magic quotes proponowałabym użyć stripslashes a następnie mysql_real_escape_string.


a do kogo ta odpowiedźquestionmark.gif
ja mam zabezpieczenie i przed xss htmlspecialchars i mysql_real_escape_stroing
robos85
Cytat(Shili @ 11.08.2008, 13:43:44 ) *
Jeśli nie zamierzasz tego nigdy wyświetlać na stronie, to nie. Jeśli zamierzasz, to jednak wypadałoby zabezpieczyć się przed xss.
Z tym że w przypadku magic quotes proponowałabym użyć stripslashes a następnie mysql_real_escape_string.


Tego kodu używam do filtracji np w logowaniu w pobieraniu loginu, lub w zapytaniach ...WHERE `id`='".sqlesc($_POST['id'])."'); ....
Do takich celów starczy?
Shili
@peter13135
Do @robos85.
Swoją drogą uważam, że jeśli chcesz użyć mysql_real_escape_string nie ma sensu używać ENT_QUOTES w htmlspecialchars.

@robos85
Myślę, że do takiego czegoś starczy spokojnie.
robos85
Cytat(Shili @ 11.08.2008, 13:57:35 ) *
@robos85
Myślę, że do takiego czegoś starczy spokojnie.


a jeżeli chciałbym, aby ktoś dodawał mi do bazy tekst - i mógł zamieszczać tam znaczniki to taki kod wystarczy?
  1. <?php
  2. function sqlesc ($content) {
  3. $content = (! get_magic_quotes_gpc ()) ? mysql_real_escape_string (htmlspecialchars($content)) : $content;
  4. return $content;
  5. }
  6. ?>


czy może w środku powinno być:
  1. <?php
  2. ?>
?
peter13135
w takim razie czy mogłbyś przerobić moją funckje??
bo niewiem jak powinna wyglądać
paziek
@robos85:
  1. <?php
  2. function sqlesc ($content) {
  3. $content = (! get_magic_quotes_gpc ()) ? mysql_real_escape_string ($content) : $content;
  4. return htmlspecialchars($content);
  5. }
  6. ?>


Przy magic_quotes też trzeba się zabepieczyc przed XSS.


@peter13135: Funkcja jest OK, ale sądzę, że nie ma sensu łączyć strip_tags() z htmlspecialchars() (w typ przypadpku), jako, że drugie zamienia tobie tagi <> na HTMLowe encje (? zwał jak zwał) i są wtedy one wyświetlane w formie tekstowej (tak jak na tym forum), więc żadne XSS nie ma wtedy prawa bytu.
strip_tags() używaj, jeśli chcesz usuwać tagi z wprowadzanego tekstu, zamiast je wyświetlać z htmlspecialchars(). Plus, dla strip_tags() możesz podać listę 'dozwolonych' tagów, np. <b>, <i> oraz <u> są dobrymi przykładami nieszkodliwych tagów.

Przykład:
Wysyłam komentarz o treści <script>alert('Shackowałem cię!');</script>
htmlspecialchars("<script>alert('Shackowałem cię!');</script>"); wyświetli <script>alert('Shackowałem cię!');</script>
strip_tags("<script>alert('Shackowałem cię!');</script>"); wyświetli alert('Shackowałem cię!');
Oba są niegroźne, ale wynik różny, prawda?
peter13135
ymm, tak patrze na swój kod i widze coś takiego
[php]$zarejestruj=$_POST['zarejestruj'];
$login = htmlspecialchars($_POST['login']);
$haslo = htmlspecialchars($_POST['haslo']);
$email = htmlspecialchars($_POST['email']);
$gg = htmlspecialchars($_POST['gg']);
$www = htmlspecialchars($_POST['www']);
$skad = htmlspecialchars($_POST['skad']);
$zainteresowania = htmlspecialchars($_POST['zainteresowania']);
$plec = htmlspecialchars($_POST['plec']);
[/php

a czy niewystarzy dać htmlspecialchars($_POST) questionmark.gif?
(dodam że teraz to ja będe je filtrował swoją funkcją zabezpiecz(), ale mniejsza z tym)
paziek
Cytat
a czy niewystarzy dać htmlspecialchars($_POST) ?

Nie, bo $_POST to tablica, a nie ciąg znaków.

Ale możesz zrobić coś podobnego przy zastosowaniu array_map http://pl.php.net/manual/pl/function.array-map.php
robos85
A co z kolejnością 2ch funkcji - pisałem tutaj - która dobra?
bełdzio
1. zrezygnuj ze sprawdzania get_magic_quotes_gpc
2. mysql_real_escape_string (htmlspecialchars($content))
robos85
czyli funkcja:
  1. <?php
  2. function sqlesc ($content) {
  3. $content=mysql_real_escape_string(strip_tags($content));
  4. return $content;
  5. }
  6. ?>

Będzie odpowiednia do dodania nowego użytkownika czy dodania komentarza?
bełdzio
dodaj htmlspecialchars i bedzie ok smile.gif
robos85
A czy strip_tags" title="Zobacz w manualu PHP" target="_manual nie usuwa całkowicie znaków html? Jeżeli tak, to po co tam jeszcze htmlspecialchars" title="Zobacz w manualu PHP" target="_manual?
Bo z twego co wiem, to 2gie tylko zamienia na encje - a ja nie chcę wogóle mieć znaków html smile.gif
Więc albo strip_tags albo htmlspecialchars dawać - moim zdaniem oczywiście;]
bełdzio
usuwa smile.gif htmlspecialchars ma za zadanie pozbycie sie ' i " i "czystem formie" glownie zeby inputow nie rozwalalo smile.gif
robos85
  1. <?php
  2. ?>


I tak będzie już ok? winksmiley.jpg
bełdzio
powinno byc smile.gif
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.