PHP sayısal içerir

3 Cevap php

Bu gibi benim sayfaları oluşturmak Eğer ben news_id çok news.php sayısal olup olmadığını kontrol etmek için var? Ya da bu güvenli mi?

index.php:

    if (ctype_digit($_GET['news_id'])) include('news.php');

news.php:

    $query = mysql_query("SELECT * FROM news WHERE news_id = $_GET[news_id]");
    $row = mysql_fetch_assoc($query);

    if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');

3 Cevap

Diğer cevaplar veritabanı doğrudan herhangi bir kullanıcı girişi veya herhangi bir diğer hassas bölgeyi izin asla, kesinlikle doğru.

Vb $ _GET, $ _POST, tüm girdileri / doğrulamak gerekir .. Sen PHP'nin filter functions yerleşik kullanmak veya bunlara hem kullanıcı verilerini ele yapmak Kek PHP veya Senfoni gibi bir çerçeve içine yerleşik bu kullanabilirsiniz çok daha kolay.

jonstjohn açık SQL enjeksiyon bu şekilde kendinizi bırakmak ve size uygulama içine kötü niyetli kod besleme etrafında tabanlı saldırı diğer formları olan iyi bir nokta vardır.

Worth yanı sıra bu konularda, ve diğerleri üzerinde arka plan biraz Jeff Atwood en 25 most dangerous programming mistakes okuma.

Kısa cevap: Evet, gerekir.

Birisi olabilir (ve) talep news.php, index.php atlayarak.

Eğer gerçekten verilerinizi kaçış ve MySQL içine göndermeden önce sterilize edilmelidir. Hiçbir garanti Birisi sonrası veri üzerinden kötü niyetli bir şey göndermek için denemez.

$news_id = (int)$_GET[news_id];

$query = mysql_query("SELECT * FROM news WHERE news_id = " . 
                      mysql_real_escape_string($news_id));
$row = mysql_fetch_assoc($query);

if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');