Sql injections

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rick

rick

04/10/2007 17:34:00
Quote Anchor link
Beste Php'ers

Ik ben momenteel bezig met mijn website sql injection vrij te maken.
Maar er zijn nogal redelijk veel optie etc om het tegen te gaan.

Welke opties gebruik jij ? ( graag uitleg erbij )

Naar wat ik gelezen heb is dat je dit ' vooral tegen moet gaan , klopt dit ?

Laat even jullie reply + jullie anti sql achter

Alvast bedankt !
 
PHP hulp

PHP hulp

08/11/2024 08:15:59
 
- SanThe -

- SanThe -

04/10/2007 17:38:00
Quote Anchor link
Het belangrijkste is dat je ALLE invoer ALTIJD checked en NOOIT zo in de query zet.
 
Rick

rick

04/10/2007 17:40:00
Quote Anchor link
Dat klopt .

Maar waar moet je op letten met teskt dan ? welke tekens vooral enof welke fucntie

om te kijken of iets alleen uit nummers bestaat gebruik ik ctype_digit fucntie voor.

is addslashes al genoeg dan ?
Gewijzigd op 01/01/1970 01:00:00 door rick
 
- SanThe -

- SanThe -

04/10/2007 17:43:00
 
Frank -

Frank -

04/10/2007 17:43:00
Quote Anchor link
Ik gebruik de volgende opzet:
PHP met PDO, prepared statements. Dat maakt SQL-injection onmogelijk.

Vervolgens wordt er in pgSQL een stored procedure aangeroepen, waardoor SQL-injection eveneens technisch onmogelijk is.

Knappe jongen als je daar nog SQL in weet te injecteren!
 
Rick

rick

04/10/2007 18:00:00
Quote Anchor link
mysql_real_escape_string zal enkelt al voldoende zijn dus ?
 
GaMer B

GaMer B

04/10/2007 18:07:00
Quote Anchor link
rick schreef op 04.10.2007 18:00:
mysql_real_escape_string zal enkelt al voldoende zijn dus ?


Sql injectie tutorial.
 
Frank -

Frank -

04/10/2007 19:20:00
Quote Anchor link
Hier even een eenvoudig voorbeeldje van een stored procedure in PL/pgSQL:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
CREATE OR REPLACE FUNCTION create_user(IN user_name TEXT, OUT user_id INT) AS
$BODY$
DECLARE
moment             TIMESTAMP;
error_string         TEXT := '';

BEGIN

<<MAIN_BODY>>
BEGIN
    moment := NOW();                 -- maak de datumtijdstempel aan (vooral handig met meerdere inserts in meerdere tabellen)
    user_id = NEXTVAL('users_id_seq');     -- maak het id aan

    INSERT INTO
        tabelnaam (
            id,
            date_created,
            name
        )
    VALUES (
        user_id,
        moment,
        user_name
    );
    
    EXCEPTION
        WHEN check_violation THEN
            error_string := 'check_violation: ' || substring(SQLERRM, '"*([A-Za-z_]+)"'); -- naam van de check-constraint
        WHEN unique_violation THEN
            error_string := 'unique_violation: ' || substring(SQLERRM, '"*([A-Za-z_]+)"'); -- naam van de unique-constraint
        WHEN OTHERS THEN
            error_string := '13|' || SQLSTATE || ';' || SQLERRM;
    
END MAIN_BODY;


<<FUNCTION_CLOSING>>
BEGIN
    IF (error_string <> '') THEN
        RAISE EXCEPTION '%',error_string; -- in php op te vangen foutmelding
    END IF;
END FUNCTION_CLOSING;

RETURN;

END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

De roep je in PHP aan de volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT user_id FROM create_user('pgFrank');

Wanneer je nu probeert om SQL-injection uit te voeren, zal de boel stuk lopen. Je kunt in de functie onmogelijk meerdere parameters opgeven. In combinatie met prepared statements is dit helemaal waterdicht. Ook krijg je mooie foutmeldingen retour mocht er ergens een constraint worden overtreden. Die zijn naar eigen behoefte verder uit te breiden.

Het voorbeeld is niet echt functioneel, met een gewone INSERT-query kun je dit eenvoudiger afhandelen. Het wordt echter een ander verhaal wanneer je 4, 5 gekoppelde tabellen van data moet gaan voorzien. Dat is met een sp een stuk eenvoudiger te regelen. (pers. mening)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.