Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
PHP

Funkcje Zabezpieczające $_POST i $_GET

PHP

  • Zamknięty Temat jest zamknięty
14 odpowiedzi w tym temacie

#1 Gh0st

    :)

  • Power User

Reputacja: 852
Czempion

  • Postów:920
  • GG:
  • Imię:Tomek
  • Lokalizacja:Rabka-Zdrój
Offline

Napisano 12.11.2011 12:30

Napisałem przed chwilą funkcje ( toznaczy 2 ) zabezpieczające $_POST i $_GET



<?
function zabezpiecz_post()
{
if ( !empty($_POST) )
{
foreach ( $_POST as $klucz => $wartosc )
{
$_POST[$klucz] = mysql_real_escape_string($wartosc);
}
}
}

function zabezpiecz_get()
{
if ( !empty($_GET) )
{
foreach($_GET as $klucz => $wartosc)
{
$_GET[$klucz] = mysql_real_escape_string($wartosc);
}
}
}

zabezpiecz_get();
zabezpiecz_post();
?>


2 funkcje powyżej zabezpieczają całą tablice $_POST i $_GET funkcją
mysql_real_escape_string()
jeżeli użyjesz tej funkcji nie bedziesz musiał za każdym razem używać np
$login = mysql_real_escape_string($login);


jak użyć ?


funkcje umieść najlepiej zaraz pod funkcją która odpowiada za łączenie się z bazą danych


dziękuje za przeczytanie ^^
  • +
  • -
  • 1

#2 Portek

    Kończymy zabawę, permanentna emerytura!

  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 12.11.2011 13:06

A to nie jest przypadkiem tak że bez funkcji mysql_connect() nie wywołasz mysql_real_escape_string()?

PHP: addslashes - Manual + PHP: htmlspecialchars - Manual w 100% załatwiają sprawę.


<?php
function zabezpieczOba()
{
if(!empty($_POST)) {
foreach ( $_POST as $klucz => $wartosc )
$_POST[$klucz] = addslashes(htmlspecialchars($wartosc));

} else if (!empty($_GET)) {
foreach ( $_GET as $klucz => $wartosc )
$_GET[$klucz] = addslashes(htmlspecialchars($wartosc));
}
}
?>

Użytkownik Portek edytował ten post 12.11.2011 13:46

  • +
  • -
  • 1

serwer-1.png
IP: ts3.cserwerek.pl


#3 Gh0st

    :)

  • Autor tematu
  • Power User

Reputacja: 852
Czempion

  • Postów:920
  • GG:
  • Imię:Tomek
  • Lokalizacja:Rabka-Zdrój
Offline

Napisano 12.11.2011 13:10

@up.
Masz racje ... ale przeczytaj co niżej w pierwszym poście pisałem ... najlepiej dać pod funkcją odpowiadającą za łączenie ze sql.

} else if (empty($_GET)) {



na pewno ?:
a nie
!empty($_GET)
?

i chyba małą literówkę złapałeś
exits

Użytkownik Gh0st edytował ten post 12.11.2011 13:16

  • +
  • -
  • 0

#4 Portek

    Kończymy zabawę, permanentna emerytura!

  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 12.11.2011 13:47

Racja, myślałem o czymś innym, a napisałem coś innego.
  • +
  • -
  • 0

serwer-1.png
IP: ts3.cserwerek.pl


#5 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 12.11.2011 14:01

A nie powinno być tak ?

function zabezpiecz_post()
{
if ( !empty($_POST) )
{
foreach ( $_POST as $klucz => $wartosc )
{
$_POST[$klucz] = stripslashes(mysql_real_escape_string($wartosc));
}
}
}

function zabezpiecz_get()
{
if ( !empty($_GET) )
{
foreach($_GET as $klucz => $wartosc)
{
$_GET[$klucz] = stripslashes(mysql_real_escape_string($wartosc));
}
}
}


Ponieważ:

Informacja:
Jeśli opcja magic_quotes_gpc została włączona, najpierw na danych należy użyć stripslashes(). Użycie tej funkcji samej spowoduje, że do danych zostaną dodane podwójne znaki unikowe.


I jeszcze taka ciekawostka:

Informacja:
Przed użyciem mysql_real_escape_string() należy otworzyć połączenie z MySQL, w przeciwnym razie zostanie wygenerowany błąd poziomu E_WARNING i zwrócona zostanie wartość FALSE. Jeśli identyfikator_połączenia nie został zdefiniowany, zostanie użyte ostatnie połączenie do serwera MySQL.


Źródło: http://php.net/manua...cape-string.php
  • +
  • -
  • 0

#6 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 12.11.2011 15:56

wpierw dowiedz się co to jest magic_quote_gpc a potem pisz
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#7 nns

    Życzliwy

  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:33
  • GG:
  • Lokalizacja:****
Offline

Napisano 14.11.2011 15:14

A jak to sie sprawdzi przy tablicach wielowymiarowych? Bo mnie się jakoś nie chce sprawdzać, że tak szczerze powiem :D

+ bo zawsze się przyda
  • +
  • -
  • 0

#8 byCZUS

    Listonosz

  • Support Team

Reputacja: 752
Guru

  • Postów:459
  • GG:
  • Steam:steam
  • Lokalizacja:GW
Offline

Napisano 14.11.2011 15:35

Nie wiem czy się przyda lecz podrzucam funkcję #vaverixa mam nadzieję, że się nie pogniewa :D

function mysql_escape_globals() {
global $_POST, $_GET, $_COOKIE;
foreach($_POST as $a => $B) { $_POST["$a"] = mysql_escape_string($B); }
foreach($_GET as $a => $B) { $_GET["$a"] = mysql_escape_string($B); }
foreach($_COOKIE as $a => $B) { $_COOKIE["$a"] = mysql_escape_string($B); }
}

  • +
  • -
  • 0

Dziękuje, dobranoc.


#9 nns

    Życzliwy

  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:33
  • GG:
  • Lokalizacja:****
Offline

Napisano 14.11.2011 19:33

To jeszcze $_SESSION :) Odpowie mi ktoś co z tymi tablicami wielowymiarowymi ?

A i jak to się będzie mieć do klas? Jak do indexa dam na początek którąś z tych funkcji i dokleje klase potem ją utworze obiekt to ten patent będzie dalej działał??

Użytkownik nns edytował ten post 14.11.2011 19:41

  • +
  • -
  • 0

#10 Gh0st

    :)

  • Autor tematu
  • Power User

Reputacja: 852
Czempion

  • Postów:920
  • GG:
  • Imię:Tomek
  • Lokalizacja:Rabka-Zdrój
Offline

Napisano 14.11.2011 19:39

Wersja którą podał byczek zabezpiecza jeszcze $_COOKIE
$_SESSION

no to

function session()
{
foreach($_SESSION as $k => $v){ $_SESSION[$k] = mysql_real_escape_string($v)}
}

i o co chodzi ci dokładniej z tymi tablicami ? :-p podaj jej budowe

Użytkownik Gh0st edytował ten post 14.11.2011 19:40

  • +
  • -
  • 0

#11 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 14.11.2011 19:42

Jak już tak szalejemy to łap duszku ^^

$GLOBALS — References all variables available in global scope
$_SERVER — Server and execution environment information
$_GET — HTTP GET variables
$_POST — HTTP POST variables
$_FILES — HTTP File Upload variables
$_REQUEST — HTTP Request variables
$_SESSION — Session variables
$_ENV — Environment variables
$_COOKIE — HTTP Cookies


Użytkownik Fili:P edytował ten post 14.11.2011 19:43

  • +
  • -
  • 0

#12 nns

    Życzliwy

  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:33
  • GG:
  • Lokalizacja:****
Offline

Napisano 14.11.2011 19:44

Doszedłem że wystarczy dodać jedną pętle więcej :D

jakoś przywylem do budowania tablic bez array więc coś takiego

$tablica[0][1][2] = "aa".1+2."a";
$tablica[0][1][3] = "aa".1+2."a";
$tablica[0][2][2] = "aa".1+2."a";
$tablica[1][0][0] = "aa".1+2."a";
$tablica[1][1][2] = "aa".1+2."a";



@edit
O env to nie słyszałem.... albo było o tym nie wiele

Użytkownik nns edytował ten post 14.11.2011 19:45

  • +
  • -
  • 0

#13 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 14.11.2011 21:20

a po co zabezpieczac dane ktorych nie da sie wykrasc/zmienic/ lub sa nie uzyteczne ??
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#14 -PainKiller-

    Wszechobecny

  • Zbanowany

Reputacja: 66
Pomocny

  • Postów:498
  • GG:
  • Steam:steam
  • Imię:Kamil
  • Lokalizacja:Kraków
Offline

Napisano 14.11.2011 21:47

zacznijmy od tego że to nie jest zabezpieczanie tylko dynamiczne przepuszczanie danych przez funkcję i tak można przepuścić przez każdą funkcję... I to ma być zabezpieczanie? To tylko jedna z wielu metod która zrobi jakieś tam działania na ciągu.

#15 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 14.11.2011 23:19

nie jestem fanem tego rozwiązania, nie wszystkie dane z GET i POST to teksty, a nawet jeśli są teksty to nie wszystkie trafiają do bazy danych w zapytaniu

bardzo chętnie widziałbym tu klasę Request:: zwracającą przetworzone zgodnie z wymaganiami dane z konkretnego pola i dopiero jednym z parametrów powiedzmy getString mógłby być przełącznik: raw/escape
  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: PHP

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych