mysqli'nin için mysql dönüştürme - değişkenleri çıktısı

4 Cevap php

Ben PHP MySQL API kullanıyorum ve şimdi artan güvenlik için MySQLi dönüştürme duyuyorum. Gördüğüm örnek sözdizimi printf kullanır, ve ben bunun gerekli olup olmadığını bilmek istiyorum. Şu anda öyle gibi, yankı kullanın:

echo "<h1>".$row['ARTICLE_NAME']."</h1>
<div id='leftlayer' class='leftlayer'>
<p><strong>Username: </strong>".$row['USERNAME']."
<p><strong>Article Number: </strong>".$row['ARTICLE_NO']."
<p><strong>Subtitle: </strong>".$row['SUBTITLE']."
<p><strong>Auction Start: </strong>".$row['ACCESSSTARTS']." 
</div>";

Eğer sonuç değişkenleri bağlamak gerekir mysqli ile, öylesine gibi bu yaptım:

$getRecords->bind_result($ARTICLE_NO, $ARTICLE_NAME, $SUBTITLE$, $CURRENT_BID, $START_PRICE, $BID_COUNT, $QUANT_TOTAL, $QUANT_SOLD, $ACCESSSTARTS, $ACCESSENDS, $ACCESSORIGIN_END, $USERNAME, $BEST_BIDDER_ID, $FINISHED$, $WATCH$$, $BUYITNOW_PRICE, $PIC_URL, $PRIVATE_AUCTION, $AUCTION_TYPE, $ACCESSINSERT_DATE, $ACCESSUPDATE_DATE, $CAT_DESC$, $CAT_PATH, $ARTICLE_DESC, $COUNTRYCODE, $LOCATION$, $CONDITIONS, $REVISED$, $PAYPAL_ACCEPT, $PRE_TERMINATED, $SHIPPING_TO, $FEE_INSERTION, $FEE_FINAL$, $FEE_LISTING, $PIC_XXL$, $PIC_DIASHOW, $PIC_COUNT, $ITEM_SITE_ID);

ve ben sadece, örneğin, bağlı değişkeni ile $ satır benim başvurusunu değiştirin eğer bilmek istiyorum:

  <p><strong>Username: </strong>".$USERNAME."

Bu yaklaşım ile herhangi bir güvenlik sorunları var mı, ya da ince

4 Cevap

Ben veritabanına yazarken ancak SQL enjeksiyonu riski olacak gibi size yardımcı olacaktır, veritabanından veri alıyorsanız bağlayıcı uygulama daha güvenli yapar emin değilim.

Eğer DB okuma almak yaklaşım ne olursa olsun, sen hala veri tamamen temiz olduğundan tamamen belli değilse htmlspecialchars() kullanarak çıktı kaçmak gerekir. Eğer Ionut için Yorumlarınız önermek gibi bağlı deyimi bu idare değil - bunu çıkış nerede uygulanabilir bir şekilde veri kaçmak zorunda. PHP / MySQL bir HTML belgesi / kabuk komut / json / etc içine baskı olup olmadığını bilmiyor. Herhangi bir çıkış ortamı için herhangi bir veri güvenli kılan bir sihirli kaçış bir yöntem yoktur.

Ben mysqli olduğunu kabul - en azından prensip olarak - hem daha güvenli ve sorgu yürütme için iyidir parametreleri, bağlamak, çünkü mysql paketi daha iyi. Ben mysqli'nin ile en az iki ciddi sorunları keşfettik, söyleniyor:

  • Bug 46808 at least three years farklı şekillerde rapor edilmiştir ve yine bir sabit olmamıştır ciddi bir sorundur. Eğer LONGTEXT sütunları kullanmak istiyorsanız bir sorun olabilir; ve
  • Mysqli başarısız nerede Bazen sadece ("kanarya forma" ya somesuch hatalar hakkında anlamsız mesajları) garip hatalar olsun. Ben sadece mysqli'nin vazgeçmek zorunda ((1) ile birlikte) bu noktada bulunuyor.

PDO muhtemelen daha iyi bir seçimdir. Me? Ben sadece geri mysql gitti. Bu sürece böylece dizeleri kaçan ve dikkatli konum olarak sadeliği ile tartışmak zor.

XML / HTML sayfaları hizmet zaman çıktı kaçmak gerekir. Bu kullanım için htmlspecialchars veya htmlentities. Neyse, ne olursa olsun veri kaynağı ve veri almak için kullanılan API çıkışını kaçmak gerekir.

Ben bazı tampon taşması güvenlik açıkları belirli bir PHP sürümleri için rapor edilmiş olduğunu biliyoruz. Ama hangi sürümleri bilmiyorum. Yani bu dayalı ve giriş düzgün printf echo kullanarak daha az güvenli olabilir kullanarak, süzülür değil varsayarak. Olsa bağlamında çok bağlıdır.