abonnement Unibet Coolblue Bitvavo
  vrijdag 28 december 2007 @ 16:17:39 #1
200754 Jongste
Jongste Design
pi_55603304
Hallo iedereen, ik ben nieuw op fok forums. Ik had een vraagje aan alle computer deskundigen hierroo.. ik heb en half jaar lang aan een site gewerkt (kweetet das erg lang) www.jongste.org/jongste
alleen het probleem is dat ik nog niks afweet van htmlentities.. iemand hier versand van??

alvast bedankt want ik wil toch eigenlijk erg graag van dat XSS af
http://www.jongste.org/jongste
pi_55603382
HTML Entities? Dit bedoel je?

Google en Wiki zijn je grote vrienden, klik.

Je echte probleem is mij nog niet helemaal duidelijk ?

-xxx-

[ Bericht 44% gewijzigd door poepeneesje op 28-12-2007 16:30:31 ]
Aan dit bericht kunnen geen rechten worden ontleend.
  vrijdag 28 december 2007 @ 16:22:18 #3
69415 Buschetta
Jouw IP toevallig ?
pi_55603431
quote:
Ik heb een nieuw 'Personal Messgae' systeem
Half jaar ??!? wtf...

In ieder geval succes ermee.
  vrijdag 28 december 2007 @ 16:27:17 #4
200754 Jongste
Jongste Design
pi_55603546
quote:
Op vrijdag 28 december 2007 16:22 schreef Buschetta het volgende:

[..]

Half jaar ??!? wtf...

In ieder geval succes ermee.
haha ja eigenlijk half jaar met twee sites hoor, alleen deze is ovegebleven. Maarjah ik probeer alles (vooral php) in de puntjes uit twe werken.... alleen die verotte XSS varbaarheid van mijn site is erg jammer...
http://www.jongste.org/jongste
pi_55603950
waarschijnlijk plemp je alles wat gebruikers invoeren rechtstreeks in een posts. Zonder hierbij de te kijken of ze in hun berichtjes bijv html / script code gebruiken. Wat je dus moet doen is de user input controleren en tags strippen en idd aan de gang met htmlentities

edit: Als iemand bijv het volgende post:
1<script>alert('xss');</script>

en jij dat weer weergeeft op je site, gebeurd dat ook netjes

Dikke kans dat er nu al 'verkeerde' data in de database zit. Dit zal je zelf even moeten fixen
"This is your life and it's ending one minute at a time." - Tyler Durden
"Sand is overrated. It's just tiny, little rocks." - Joel
pi_55604070
Als je niets van HTML af weet zou ik niet met PHP beginnen. Ik stel voor dat je hier eens begint rond te neuzen:

http://www.handleidinghtml.nl/
pi_55604200
http://ha.ckers.org/xss

Deze moet je er zowiezo allemaal uitfilteren Verder een paar handige PHP functies die je daarvoor kunt (moet) gebruiken:

htmlentities() http://nl3.php.net/manual/en/function.htmlentities.php
htmlspecialchars() http://nl3.php.net/manual/en/function.htmlspecialchars.php
urlencode() http://nl3.php.net/manual/en/function.urlencode.php
strip_tags() http://nl3.php.net/manual/en/function.strip-tags.php
mysql_real_escape_string() http://nl3.php.net/manual(...)al-escape-string.php
pi_55604227
Als je net zo goed scripts schrijft als tekst dan snap ik waarom je er zo lang over hebt gedaan. Als de vraag is of iemand verstand heeft van HTML entities dan moet het antwoord al wel haast ja zijn. Het blijft voor mij echter een vraag hoe jij van XSS afkomt door het beantwoorden van je vraag, maar goed.
pi_55604306
Oh en je moet quotes even escapen want nu is je hele site stuk
  zaterdag 29 december 2007 @ 00:54:53 #11
20849 Fred
Beroepschagrijn
pi_55615937
Sloop trouwens ook die e-mailadressen van je site...

Ten eerste niet zo netjes om een e-mailadres zo publiekelijk te tonen, ten tweede is het voor spambotjes zo wel heel eenvoudig om aan wat extra adressen te komen om te spammen.
So we just called him Fred
pi_55619524
Kan iemand een voorbeeld posten van hoe je veilig data ophaalt uit een mysql-database, en hoe je de formdata er veilig instopt? Dus met alle afhandelingen erbij?
pi_55619570
@ Tarabass:
quote:
http://ha.ckers.org/xss

Deze moet je er zowiezo allemaal uitfilteren Verder een paar handige PHP functies die je daarvoor kunt (moet) gebruiken:

htmlentities() http://nl3.php.net/manual/en/function.htmlentities.php
htmlspecialchars() http://nl3.php.net/manual/en/function.htmlspecialchars.php
urlencode() http://nl3.php.net/manual/en/function.urlencode.php
strip_tags() http://nl3.php.net/manual/en/function.strip-tags.php
mysql_real_escape_string() http://nl3.php.net/manual(...)al-escape-string.php
  zaterdag 29 december 2007 @ 10:41:44 #14
17137 Sander
Nerds do it rarely
pi_55619574
quote:
Op zaterdag 29 december 2007 10:37 schreef Tarabass het volgende:
Kan iemand een voorbeeld posten van hoe je veilig data ophaalt uit een mysql-database, en hoe je de formdata er veilig instopt? Dus met alle afhandelingen erbij?
1
2
3
4
5
6
7
8
9
10
11
<?php
// halen
$query 'select veld from tabel';
$result mysql_query($query);
$veld mysql_result($result,0,'veld');
$veld_safe htmlspecialchars($veld,ENT_QUOTES);

// brengen
$query 'insert into tabel (`veld`) VALUES ("'.mysql_real_escape_string($_POST['value']).'");';
$result mysql_query($query);
?>
pi_55619828
quote:
Op zaterdag 29 december 2007 10:41 schreef Slarioux het volgende:

[ code verwijderd ]
En addslashes en stripslashes hoef je dan niet te gebruiken?
pi_55619838
quote:
Op zaterdag 29 december 2007 10:58 schreef Tarabass het volgende:

[..]

En addslashes en stripslashes hoef je dan niet te gebruiken?
mysql_real_escape_string is een andere manier voor addslashes.
  zaterdag 29 december 2007 @ 11:01:01 #17
17137 Sander
Nerds do it rarely
pi_55619847
quote:
Op zaterdag 29 december 2007 10:58 schreef Tarabass het volgende:

[..]

En addslashes en stripslashes hoef je dan niet te gebruiken?
Die vermijd ik zoveel mogelijk. Levert alleen maar inconsistentie op.
pi_55620066
quote:
Op zaterdag 29 december 2007 11:01 schreef Slarioux het volgende:

[..]

Die vermijd ik zoveel mogelijk. Levert alleen maar inconsistentie op.
Dit deed ik altijd bij het ophalen:

1
2
3
4
5
6
if($num_rows != 0) {
    while($record = mysql_fetch_object($query)) {
        $naam    = htmlspecialchars($record->naam);
        $naam    = addslashes($naam);
    }
}


Bij insert deed ik eigenlijk niets. Iig bedankt voor die uitleg!

[ Bericht 7% gewijzigd door Tarabass op 29-12-2007 11:23:40 ]
  zaterdag 29 december 2007 @ 11:22:37 #19
17137 Sander
Nerds do it rarely
pi_55620130
Wat ik nu zoveel mogelijk doe, is irritante tekens wegfilteren (wazige command-opdrachten en wazige newlines enzo) en de rest zo puur mogelijk in de database gooien. Bij het ophalen filter ik het wel.
  zaterdag 29 december 2007 @ 11:33:31 #20
65252 Bart
Slecht voor de gezondheid
pi_55620319
Wat een lompe TT. Daarbij is er een apart topic voor PHP.
I have the cape. I make the fucking Whoosh noise.
Op donderdag 12 juli 2012 19:56 schreef Lithia het volgende:
Ik durf hier niets over te zeggen. Bart is koning hier.
pi_55621653
quote:
Op zaterdag 29 december 2007 10:41 schreef Slarioux het volgende:
[..]

[ code verwijderd ]
Of gebruik PDO met geparameteriseerde query's

1
2
3
$stm = $db->prepare("SELECT id, name FROM items WHERE value = :value");
$stm->execute(array('value' => 'foo'));
$items = $stm->fetchAll(PDO::FETCH_ASSOC);
quote:
Op zaterdag 29 december 2007 11:18 schreef Tarabass het volgende:
[..]
Dit deed ik altijd bij het ophalen:
[ code verwijderd ]

Bij insert deed ik eigenlijk niets. Iig bedankt voor die uitleg!
Als je dat doet heb je blijkbaar geen idee waar je mee bezig bent
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_55621842
quote:
Op zaterdag 29 december 2007 12:46 schreef SuperRembo het volgende:
Als je dat doet heb je blijkbaar geen idee waar je mee bezig bent
Leg het dan even uit? Ik vraag gvd om uitleg toch?
pi_55622434
quote:
Op zaterdag 29 december 2007 12:55 schreef Tarabass het volgende:

[..]

Leg het dan even uit? Ik vraag gvd om uitleg toch?
Het gaat juist om het inserten, of eigenlijk om de query. Je moet afvangen dat je iets doet als:

1var $query = "select * from dbtable where blaat = $blaat";


En dat die $blaat dan uit een invoerveldje komt die zomaar ongecontroleerd in de query geplempt wordt. Wat gebeurt er dan als iemand invult "1 or 1"? Of nog erger: "1; drop table dbtable;" invult in het formulierveld? Juist!

Daar moet je dus filteren!! De data die uit je db komt is wat dat betreft veilig, die voer je niet uit, behalve als je de data weer in nieuwe queries gebruikt. Als je de data alleen gebruikt hoef je alleen te zorgen dat het geen problemen oplevert met speciale html karakters of quotes etc. Wel kan er bijv javascript inzitten en daar moet je dan weer voor uitkijken als je het op een html pagina plempt. Dat is waarschijnlijk ook het probleem van TS, al is dat meestal een minder ernstig probleem dan sql injection (meestal blijft de schade zeer beperkt).

Een fatsoenlijke taal gebruikt voor de beveiliging van sql injection overigens placeholders waardoor het allemaal automatisch gaat. Deze worden automatisch gequote en kunnen dus geen kwaad, wat je ook invult. Bijv in perl:

1
2
3
4
5
6
7
8
my $cgi = CGI->new;
my $userinput = $cgi->param('userinput');
my $dbh = DBI->connect;
my $sth = $dbh->prepare("select foo from bar where foobar = ?;");
$sth->execute($userinput) or die $sth->errstr;
while (my $row = $sth->fetchrow_hashref()) {
    ....
}


Het vraagteken wordt vervangen met de gequote inhoud van $userinput. Dit is 100% sql injection proof. Misschien heeft php ook wel een plugin voor zoiets maar standaard kan het niet dacht ik.
pi_55622453
quote:
Op zaterdag 29 december 2007 12:55 schreef Tarabass het volgende:

[..]

Leg het dan even uit? Ik vraag gvd om uitleg toch?
1'; OR 1=1;
pi_55622509
quote:
Op zaterdag 29 december 2007 13:19 schreef Farenji het volgende:

[..]

Het gaat juist om het inserten, of eigenlijk om de query. Je moet afvangen dat je iets doet als:
[ code verwijderd ]

En dat die $blaat dan uit een invoerveldje komt die zomaar ongecontroleerd in de query geplempt wordt. Wat gebeurt er dan als iemand invult "1 or 1"? Of nog erger: "1; drop table dbtable;" invult in het formulierveld? Juist!

Daar moet je dus filteren!! De data die uit je db komt is wat dat betreft veilig, die voer je niet uit, behalve als je de data weer in nieuwe queries gebruikt. Als je de data alleen gebruikt hoef je alleen te zorgen dat het geen problemen oplevert met speciale html karakters of quotes etc. Wel kan er bijv javascript inzitten en daar moet je dan weer voor uitkijken als je het op een html pagina plempt. Dat is waarschijnlijk ook het probleem van TS, al is dat meestal een minder ernstig probleem dan sql injection (meestal blijft de schade zeer beperkt).

Een fatsoenlijke taal gebruikt voor de beveiliging van sql injection overigens placeholders waardoor het allemaal automatisch gaat. Deze worden automatisch gequote en kunnen dus geen kwaad, wat je ook invult. Bijv in perl:
[ code verwijderd ]

Het vraagteken wordt vervangen met de gequote inhoud van $userinput. Dit is 100% sql injection proof. Misschien heeft php ook wel een plugin voor zoiets maar standaard kan het niet dacht ik.
Voor mij gaat dat via mijn SQL klasse, die is ook makkelijk om zelf te maken maar om veiligheidsredenen zal ik nooit code van mijn SQL en Security klassen plaatsen, just to be sure

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$obj_SQL
->prepare'SELECT * FROM `tbl`.`name` WHERE `id` = [id]' );
$obj_SQL->set'id'$obj_Secure->int_check$_GET'id' ] ) );
$obj_SQL->execute();

if( 
$obj_SQL->numRows() !== )
{

  
//loopen

}
?>

Overigens heeft ie ook nog functionaliteit om meerdere queries erin te doen etc.

Ik ben het niet met je eens dat met XSS de schade meestal beperkt blijft, cookies stelen, sessies overnemen etc is niet echt leuk
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')