PHP Güvenliği #6
By husmen73 on Tem 18, 2008 in PHP
Form İşleme
Sahte (Yalancı) Form Kayıtları
Veri kontrolünün önemini anlamak için aşağıdaki aşağıdaki örneği inceleyelim. (adreslerin hepsi temsilidir). http://example.org/form.html:
<form action=”/process.php” method=”POST”>
<select name=”color”>
<option value=”red”>red</option>
<option value=”green”>green</option>
<option value=”blue”>blue</option>
</select>
<input type=”submit” />
</form>
Kötü niyetli bir kişinin bu formu aşağıdaki gibi değiştirebilir.
<form action=”http://example.org/process.php” method=”POST”>
<input type=”text” name=”color” />
<input type=”submit” />
</form>
Bu durumda form herhangi başka bir sunucuda veya herhangi bir bilgisayarda (bir tarayıcıdan görüntülenebilir olması yeterli) bulundurulabilir. URL kullanıldığı için aynı dosyaya POST yöntemi ile gönderilebilir.
Bu şekilde formlarda tarayıcı tarafında yapılan veri kontrolleri kolayca atlatılabilir. Yukarıdaki örnekte normal haldeki formda $_POST[’color’] değişkenin değeri red,green, veya blue olması gerekirken, yapılan değişiklikle herhangi bir değer olabilir.
Sahte HTTP İstekleri (HTTP Requests)
Daha güçlü ama az kullanılan bir veri kandırmacası da HTTP İstekleri ile yapılır. Yukarıdaki örnekte HTTP isteği şu şekilde görünür :
POST /process.php HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
Content-Length: 9
color=red
telnet bu konuda deneme yapmak için kullanılabilir. http://www.php.net/’ye bir GET isteği şu şekilde yapılabilir :
$ telnet www.php.net 80
Trying 64.246.30.37…
Connected to rs1.php.net.
Escape character is ’^]’.
GET / HTTP/1.1
Host: www.php.net
HTTP/1.1 200 OK
Date: Wed, 21 May 2004 12:34:56 GMT
Server: Apache/1.3.26 (Unix) mod_gzip/1.3.26.1a PHP/4.3.3-dev
X-Powered-By: PHP/4.3.3-dev
Last-Modified: Wed, 21 May 2004 12:34:56 GMT
Content-language: en
Set-Cookie: COUNTRY=USA%2C12.34.56.78; expires=Wed,28-May-04 12:34:56 GMT; path=/; domain=.php.net
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=ISO-8859-1
2083
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01Transitional//EN”>
…
Aynı isteği PHP ile de yapabilirsiniz:
<?php
$http_response = ’’;
$fp = fsockopen(’www.php.net’, 80);
fputs($fp, “GET / HTTP/1.1\\\\\\\\\r\\\\\\\\\n”);
fputs($fp, “Host: www.php.net\\\\\\\\\r\\\\\\\\\n\\\\\\\\\r\\\\\\\\\n”);while (!feof($fp))
{
$http_response .= fgets($fp, 128);
}fclose($fp);
echo nl2br(htmlentities($http_response));
?>
HTTP isteğinin bu şekilde gönderilmesi ve kontrol edilmesi programcıya esneklik sağlar.














Yorum gönder