Ik heb tehoren gekregen dat Xss Injection op mijn site mogelijk is. (via mijn search box!)
Na het googlen heb ik ontdekt dat ik in ieder geval een aantal tekens []#
en woorden zoals script href enz. moet blokkeren. Nu mijn vraag, Hoe blokkeer ik tekens en woorden in een search box?
Dit is mijn code: (kijkt u vooral naar de 2 vetgedrukte gedeeltes)
en volgens mij gaat het om het vetgedrukte gedeelte waar ik iets aan toe moet voegen.<?php
$therow = 0;
if ($_GET['q'] && $_GET['q'] != 'Search...') {
$var = strip_tags($_GET[q]);
$var1 = mysql_real_escape_string($var);
$trimmed = trim($var1);
$total_results_search = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM ava_games WHERE description like \"%$trimmed%\" OR name like \"%$trimmed%\" AND published=1"),0);
if ($trimmed == "" OR $trimmed == 'Search...')
{
echo '<strong>'.NOSEARCH.'</strong><br /><br />';
}
elseif ($total_results_search >= 100)
{
echo '<strong>'.TOO_MANY.'</strong><br /><br />';
}
elseif ($total_results_search == 0)
{
echo '<strong>'.NORESULTS.'</strong><br /><br />';
}
else
{
$sql = mysql_query("select * from gg_games WHERE description like \"%$trimmed%\" OR name like \"%$trimmed%\" AND published=1
order by id DESC");}
echo '<div id="catwrapper">';
while($row = mysql_fetch_array($sql))
{
$therow = $therow + 1;
if ($row['import'] == 1) {
$game['image_url'] = "$setting[site_url]/games/images/$row[url].png";}
else if ($row['import'] == 3) {
$game['image_url'] = "$setting[site_url]/games/images/$row[image]";}
else {
$game['image_url'] = $row['image'];}
if (strlen($row['name']) > $template['category_game_chars']) {
$game['name'] = substr($row['name'], 0, $template['category_game_chars'])."...";
}
else {
$game['name'] = $row['name'];
}
if (strlen($row['description']) > $template['category_game_desc_chars'])
{
$game['description'] = substr($row['description'], 0, $template['category_game_desc_chars'])."...";
}
else
{
$game['description'] = $row['description'];
}
if ($setting['seo_on'] == 0) {
$game['url'] = $setting['site_url'].'/index.php?task=view&id='.$row['id'].$setting['seo_extension'];
}
else if ($setting['seo_on'] == 2) {
$cat_name = mysql_fetch_array(mysql_query("SELECT name FROM ava_cats WHERE id=$row[category_id]"));
$seo_name = seoname($row['name']);
$seo_cat_name = seoname($cat_name['name']);
$game['url'] = $setting['site_url'].'/'.$seo_cat_name.'/'.$row['id'].'/'.$seo_name.$setting['seo_extension'];
}
else {
$seo_title = seoname($row['name']);
$game['url'] = $setting['site_url'].'/view/'.$row['id'].'/'.$seo_title.'';
}
if ($user['admin'] == 1)
{
$game['admin_edit'] = '<a href="'.$setting['site_url'].'/admin/?task=manage_games&id='.$row['id'].'">Edit</a>';
}
else
{
$game['admin_edit'] = '';
}
$game['plays'] = $row['hits'];
$currentid = $row['id'];
$cat_numb = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM ava_ratings WHERE game_id='$currentid'"),0);
$total_plays1 = mysql_query("SELECT sum(rating) AS rating FROM gg_ratings WHERE game_id='$currentid'");
$total_plays2 = mysql_fetch_array($total_plays1);
if ($cat_numb != 0) {
$rating = ($total_plays2['rating'] / $cat_numb);}
else {
$rating = 0;}
if ($rating >= 0){$game['rating'] = NOT_RATED;}
if ($rating >= 0.5){$game['rating'] = "1/5";}
if ($rating >= 1.5){$game['rating'] = "2/5";}
if ($rating >= 2.5){$game['rating'] = "3/5";}
if ($rating >= 3.5){$game['rating'] = "4/5";}
if ($rating >= 4.5){$game['rating'] = "5/5";}
include('.'.$setting['template_url'].'/'.$template['search_game']);
if ($therow == $template['category_columns']) {
echo '<br style="clear: both"/></div><div class="homewrapper">';
$therow = 0;
}
}
echo '<br style="clear: both"/></div>';
$total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM ava_games WHERE published=1"),0);
$total_pages = ceil($total_results / $setting['max_results']);
}
else {
echo '<br /><br /><div align="center">'.ENTER_SEARCH.':<br /><br /><form name="form" action="'.$setting['site_url'].'/index.php?task=search" method="get">
<input name="q" type="text" size="25"/>
<input type="submit" name="Submit" value="'.SEARCH_BUTTON.'" class="btn" />
<input name="task" type="hidden" value="search" />
</form></div>';}
?>
Help alstublieft!
Bedankt!
Ruud S.
- wat is xss injectie en hoe voorkom ik het?? HELP!!!
-
02-03-2010, 17:26 #1Ruud S. Guest
wat is xss injectie en hoe voorkom ik het?? HELP!!!
-
-
02-03-2010, 17:44 #2
- Berichten
- 392
- Lid sinds
- 15 Jaar
Dit kunt u beter aan de mensen met ervaring overlaten.
Zo weet u het zeker.
Hiervoor adviseer ik Chris van SiteSafe.nl.
-
02-03-2010, 17:51 #3
- Berichten
- 2.392
- Lid sinds
- 17 Jaar
Bedankt voor de feedback Stijn ;-)
Ruud, zoals ik al zei in mijn privebericht: htmlentiteiten en eventueel striptags gebruiken :-)
-
02-03-2010, 17:59 #4Ruud S. Guest
weet iemand hoe ik dat implementeer?
-
02-03-2010, 19:10 #5
- Berichten
- 613
- Lid sinds
- 19 Jaar
-
02-03-2010, 19:31 #6
- Berichten
- 415
- Lid sinds
- 17 Jaar
Je kan beter mysql_real_escape_string gebruiken voor het beveiligen van je query. Deze functie is er voor gemaakt om injecties te voorkomen.
Zie: http://php.net/manual/en/function.my...ape-string.php voor meer informatie
@Chris: bedankt voor het melden, had ik inderdaad niet gezien. Sorry voor mijn bericht.Laatst aangepast door Henk G. : 02-03-2010 om 19:59
-
02-03-2010, 19:33 #7
- Berichten
- 2.392
- Lid sinds
- 17 Jaar
Henk, doet de TS al :-)
-
02-03-2010, 20:31 #8
- Berichten
- 15
- Lid sinds
- 15 Jaar
Van 2001 tot 2007 was ik ook altijd druk met het dichttimmeren van scripts. Drie keer een hele server gehacked en een aantal keer een domein/site. Het is eigenlijk een gebed zonder einde. Sindsdien installeer ik standaard mod_security en csf+lfd op de server. Bij de voordeur (de server) beginnen scheelt een hoop gedoe. Tot nu toe schadevrij gebleven...afkloppen :-)
Mod_sec; http://www.modsecurity.org/
CSF+LFD; http://www.configserver.com/cp/csf.html
Als je niet een eigen server hebt, kan het zijn dat je host geen trek heeft in mod_sec, omdat het in het begin nogal wat werk is om de rules te tunen. De standaard rules-set is nogal strikt en zal vaak ook "legale" acties blokkeren. Je bent zeker een paar avonden druk met logfiles lezen en rules aanpassen. De tools zijn gratis.Laatst aangepast door Karel Spruit : 02-03-2010 om 20:56
-
04-03-2010, 08:44 #9
- Berichten
- 690
- Lid sinds
- 15 Jaar
$safestring=htmlspecialchars($string);
vervangt een " door " en & door &
$safestring=mysql_real_escape_string($string);
verangt ' door \' en " door \"
Gebruik een combi van die 2, of gewoon alleen htmlspecialchars. dan zit je wel goed. =)
-
04-03-2010, 08:58 #10
- Berichten
- 2.392
- Lid sinds
- 17 Jaar
Fout Rob, als je geen real_escape_string gebruikt ben je alsnog gevoelig voor SQL injecties ;-)
-
04-03-2010, 09:13 #11
- Berichten
- 325
- Lid sinds
- 17 Jaar
Volgens mij weet de helft van de mensen die hier replyen niet dat het om een XSS injectie gaat en niet een SQL injectie.
-
05-03-2010, 08:25 #12
- Berichten
- 690
- Lid sinds
- 15 Jaar
Dat bedoel ik. Even ter zijde, Chris, hoe wil je een SQL injectie uitvoeren als htmlspecialchars gebruikt word?
leg me dat plz ff uit.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic