Kullanıcı verileri koruma - yöntem çağrıları, SQL ve dosya aramaları kullanım için

3 Cevap php

I $_GET kullanılarak, $_POST ve yöntem çağrıları, SQL sorguları ve dosya aramalar $_COOKIE değişkenleri am - ve ondan kaçmak için gerekli olan / bu kullanıcı verileri yeniden Daha iyi güvenlik (enjeksiyon saldırıları ve benzeri kaçının). Bunu nasıl yapılır önerirsiniz?

Yerleşik kaçış işlevi ... suları akan almak için bazı fikirler:

  • Için ters eğik çizgi ekleyin: \x00, \n, \r, \, ', " ve \x1a SQL sorguları için dize güvenli hale getirmek için - mysql_real_escape_string gibi ().
  • [a-zA-Z0-9 _-\.] ("\." kaçan bir "."-Nokta olduğu) kabul karakter sayısını sınırlayın.

Sizin girişleri takdir edilmektedir. Teşekkürler.

3 Cevap

Öncelemeli çok veri gönderiyor sisteme bağlı olarak, benim önerim özellikle her sistem için oluşturulan PHP tarafından sağlanan işlevleri kullanmak olacaktır.

Örneğin:

Her iki şekilde: yok tekerleği yeniden icat!

Zaten çıkışı birçok tür için mevcut fonksiyonlar / metotlar kaçan: bunları kullanın!

(Kullanıcı girdiyseniz) kaçmak gerekir bazı şeyleri görüntü yerleri olduğunu unutmayın vb

Birisi sıcak bu ile bir görüntü (örneğin bir avatar) bağlı ise

http://yoursite.com/admin/user/delete/1

ve ardından görünümünde kodu

<img class="avatar" alt="<?php echo $userName; ?>" src="<?php $avatarUrl; ?>" />

Eğer yönetici olarak giriş o zaman yanlışlıkla bir kullanıcı silme olabilir. Tabii ki, umarım silinmesi bu tür bir yazı ile yapılır, ama yine de atlatılabilir.

Bu durumda, htmlspecialchars() yardımcı olmayacaktır.

Sen bir yazı ile olmak için yöntemler değişen tüm verileri zorlanarak bir saldırgan için zor yapabilir ve her silme eylem için bir belirteç üreten ve silmeden önce doğrulayarak neredeyse imkansız hale getirebilir.

Ben böyle kullanıyorum:

function escape($sql) {
    // Stripslashes
    if (get_magic_quotes_gpc()) {
    	$sql = stripslashes($sql);
    }
    //if this is the intedger
    if (!is_int($sql) || $sql == '0') {
    	$sql = "'" . mysql_real_escape_string($sql) . "'";
    }
    return $sql;
}

Ve MySQL sorguda

mysql_query("SELECT SQL_CACHE * FROM `page` WHERE `id` = ".escape($_GET['id'])." LIMIT 1");