1. Stäng av register_globals i filen php.ini. Det ser till att php inte skapar globala variabler.
Normalt är allt som skickas till en php-sida med get(), post() eler cookies() registrerat som globala variabler.
Det gör det lätt att fejka variabler genom att helt enkelt skriva "?variabelnamn=hackervärde" efter url-adressen till din sida.
2. I vart enda script som använder sig av användardefinierade sökvägar eller strängar bör man strippa ut
dubbla punkter och dubbelslash (.. och //) för att förhindra otillbörlig tillgång till servern
(enklast och snabbast med str_replace eller med reg expr). Gör en funktion som returnerar en ren sträng:
function clean(&$string) { //& = byref
if (substr($string, -1) != "/") {
$string .= "/";
}
$string = str_replace("/..", "/", $string);
$string = str_replace("//", "/", $string);
return $string;
}
3. Om du ska använda require eller include: Se till att kolla att filen finns innan,
så att inte användaren kan utnyttja en URL-wrapper för att peka på någon annan fil.
Var noga med att alltid använda include eftersom require alltid laddas in. T ex:
if (file_exists("$filename")) {
include_once("$filename");
} else {
die("Hittade inte filen");
}
4. När det gäller filnamn bör man vara försiktig med att lagra dem i variabler.
Om det är en uppladdad fil kan man kontrollera att den verkligen är uppladdad med funktionen is_uploaded_file($filename).
Det kan vara användbart eller nödvändigt att göra om man ska använda vidare funktioner för att manipulera innehållet i filen.
Att inkludera en fil med include($page) skapar ett vidöppet säkerhetshål.
Allt en användare då behöver göra för att få tillgång till obehöriga filer är att skriva exempelvis
dinphpsida.php?page=/etc/passwd. Lita aldrig på variabler som du inte har kontrollerat om någon användare har ändrat.
5. Spara aldrig lösenord hårdkodade i scripten. Spara dessa i separata oåtkomliga mappar eller i databaser.
6. Kalla dina inkluderade filer för .inc.php istället för .inc. Lägg dem i bibliotek utan rättigheter.
7. Se till att omsluta variabler som är definierade av användare i sql-frågor med enkla citattecken. T ex:
mysql_query ("update users set password = '$password' where id = '$id'");
Användaren kan dock inte själv skriva in ett enkelt citattecken. Det tas om hand av php och
en backslash sätts in före i alla variabler som skickas via get, post eller cookie.
8. Alla som har en webbplats på en server kan läsa alla andra webbplatsers sessioner på
samma server (sessionsdata sparas som filer, oftast i /tmp-katalogen).
Kontrollera att en sessionsvariabel verkligen kommer från en session med session_is_registered()
9. Om funktionen ) används bör man vara försiktig med att skicka variabler till funktionen.
Dessa kan nämligen tolkas som php-kod.
10. Om man lägger /e till strängen i det första argumentet i funktionen preg_replace() så exekveras det andra som ren php-kod.
11. Om ) används kan man avsluta ett befintligt kommando med semikolon och sedan köra ett annat direkt efter.
Skicka alla variabler genom escapeshellarg() innan )
12. Använd safe_mode om du inte har en egen server och kan kolla igenom alla php-script.
Läs mer på http://www.zend.com/manual/features.safe-mode.php
13. Stäng av allow_url_. Om denna är på kan man utnyttja alla säkerhetshål som har att göra med filer på en annan server.
14. Använd open_basedir. Denna funktion ser till att det bara går att öppna filer som ligger i den specifiserade katalogen.
15. Stäng av display_errors och använd log_errors.
16. Php version 4.1.0 och senare innehåller bl a de nya arrayerna $_REQUEST, $_GET, $_POST och $_COOKIE
istället för de gamla $HTTP_*_VARS och behöver inte läsas in med "global", oavsett om de används i
eller utanför en funktion. Php4 är säkrare än php3. Man kan avgöra om en variabel är satt i php-koden
eller satt genom att skriva exempelvis script.php?variabel=xxx vilket är ett vanligt försök att ändra
på värden i ditt script. Exempel i php4:
function isLocalVariable(&$varname) { //byref
$local = true;
if (in_array($varname, $_REQUEST)) {
$local = false;
}
return $local;
}Filter
2004-04-12
Regler för säkerhet i php
Php
2004-04-10
Ut med - Bättre Flashtaggar
Flash
<object type="application/x-shockwave-flash" data="movie.swf"
width="400" height="300">
<param name="movie" value="movie.swf" />
<img src="noflash.gif" width="200" height="100" alt="" />
</object>
<!-- alternativ som även streamar:
1. Bygg en "containerfilm" i Flash som laddar huvudfilmen (c.swf nedan)
2. Låt den innehålla följande actionscript i frame 1 i filmens rot:
_root.loadMovie(_root.path,0);
3. Använd följande kod -->
<object type="application/x-shockwave-flash" data="c.swf?path=movie.swf"
width="400" height="300">
<param name="movie" value="c.swf?path=movie.swf" />
<img src="noflash.gif" width="200" height="100" alt="" />
</object> 2004-04-04
Connecta till databas
Php
<html>
<head>
</head>
<body>
<?
$conn = mysql_connect("localhost", "", "") or die ("Gick inte att connecta");
$db = mysql_select_db("test", $conn);
$sql = "select * from gastbok";
$rs = mysql_query($sql, $conn) or die ("Kunde inte utföra frågan.") ?>
<table border="0">
<?
while ($row = mysql_fetch_array($rs)) {
echo "<tr>\n<td>". $row["namn"] . "</td>\n";
echo "<td>" . $row["epost"] . "</td>\n";
echo "<td>" . $row["inlagg"] . "</td>\n</tr>\n";
}
mysql_free_result($rs);
mysql_close($conn);
?>
</table>
</body>
</html> 2004-04-03
Kreativ css
Css
<textarea name="adress" wrap="virtual" rows="4" cols="30"
style="border-style:solid; border-width:0px; background-color:#FFFFFF; scrollbar-face-color: #FFFFFF;
scrollbar-shadow-color: #FFFFFF;
scrollbar-highlight-color: #FFFFFF;
scrollbar-3dlight-color: #FFFFFF;
scrollbar-darkshadow-color: #FFFFFF;
scrollbar-track-color: #FFFFFF;
scrollbar-arrow-color: #CA0000; font-family:Verdana; font-size:10px"
class="no_link">
</textarea> 2004-04-01
PreloadImages
Javascript
<script language="JavaScript" type="text/JavaScript"><!--
function preloadImages() {
var d = document;
if(d.images) {
if(!d.MM_p) {
d.MM_p = new Array();
}
var i;
var j = d.MM_p.length;
var a = preloadImages.arguments;
for(i = 0; i < a.length; i++) {
if (a[i].indexOf("#") != 0) {
d.MM_p[j] = new Image;
d.MM_p[j++].src = a[i];
}
}
}
}
//--></script>
//Kalla på scriptet:
<body onLoad="preloadImages('img/bild.gif, img/bild2.jpg');"> 