v2.5.2
Giriş yap

Php'de xss açığı kapatma

sdfg
160 defa görüntülendi ve 2 kişi tarafından değerlendirildi

Merhaba arkadaşlar. Yaptığım web sitesinde xss açığı var ve kapatmak istiyorum. Şimdi benim takıldığım kısım bu açığı kapatmak için örneğin $_POST["veri"] diye post aldığımızı varsayalım. Bunu htmlspecialchars($_POST["veri"]) şeklinde kullansam xss açığını kapatmak için yeterli midir? Örneğin bu veriyi veritabanında bu şekilde filtreleyerek kaydetsem tekrar echo ile ekrana bastırırkende bu fonksiyonu kullanmam gerekir mi?

Kısaca htmlspecialchars ile veriyi veritabanına kaydetmeden filtrelersem tekrar ekrana basarken başka bir işlem yapmam gerekir mi?

Cevap yaz
Cevaplar (3)
creyz1n
36 gün önce

Ekrana veriyi yazdırırken htmlspeacialchars() kullansan yeterli veritabanına keydederken htmlspecialchars() kullanmana gerek yok!

obiryesil
39 gün önce

"public function getSecurity($data) {

    if (is_array($data)) {
        $variable=array_map('htmlspecialchars',$data);
        $response =array_map('stripslashes',$variable);
        return $response;
    }
    else {
        $variable=htmlspecialchars($data);
        $response =stripslashes($variable);
        return $response;
    }
}"


zamanında böyle bir fonksiyon ile sorunu çözmüştüm.

Kullanımına örnek vermek gerekirse.
      " if (isset($_POST['save'])) {
                                if ($_POST['save'] == 1001) {
                                    $title = $_POST['titles'];
                                    $description = $_POST['description'];
                                    $addate = date('Y-m-d H:i:s');
                                    $statu = $_POST['statu'][0];

                                    $sql = "INSERT INTO vt_Name( titles, description, addate, user_id, statu) VALUES(?,?,?,?,?)";
                                    $args = [$title, $description, $addate, $user_id, $statu];
                                    $result = $adminclass->getSecurity($args);
                                    print $adminclass->pdoInsert($sql, $result);
                                }
                            }"
                            
                            

Burda yapılan $sql den gelen $args değişkenlerini getSecurity fonksiyonundan geçirip veritabanı saldırılarını veritabanı şişmesini engellemek.
ben bu şekilde kullanıyordum seninde işini çözmene yardımcı olur belki.

ebykdrms
45 gün önce

SQL injection açığından kurtulmak için PDO kullanmalısın.
XSS açığından korunmak için de ekrana basacağın verileri htmlspecialchars() ile düzenlemen yeterli.
XSS açığını doğuran şey, tarayıcının yorumlayabileceği verinin DOM'a basılması.
Yalnızca veriyi ekrana basarken buna dikkat etmen yeterli olur.

Ama eğer veritabanına htmlspecialchars() ile eklersen, ekrana basarken tekrar htmlspecialchars() tekrar ile düzenlemene gerek kalmaz.
Bana sorarsan veritabanında verinin orijinal halini (sql injection'dan sakınarak) saklamalısın. Sadece veriyi ekrana basarken htmlspecialchars() ile basmalısın.