Anlamak giriş PHP kaçan

5 Cevap php

Hep beni karıştı tek şey giriş kaçan ve SQL enjeksiyonu gibi saldırılardan korunmak ister ya da değildir.

Ben bir PHP dosyası HTTP POST kullanarak veri gönderen bir form var söylüyorlar. Ben bir giriş alanına aşağıdakileri yazın ve formu gönderin:

"Hello", said Jimmy O'Toole.

: Bu POST veri aldığı PHP sayfada yankılayacak / yazdırırsanız, o kadar çıkıyor

\"Hello\", said Jimmy O\'Toole.

Bu kafa karıştırıcı olur noktasıdır. I (My) SQL içine bu giriş dize koymak ve çalıştırmak ise, (tırnak kaçtı beri) veritabanı cezasına içine gidersiniz, ama SQL enjeksiyon durdurmak istiyorsunuz?

Ben giriş dizesini alıp onun üzerinde mysqli real_escape_string gibi bir şey ararsanız, bu gibi çıkıyor:

\\"Hello\\", said Jimmy O\\'Toole.

: O (My) SQL ile veritabanına gider Yani, o kadar biter

\"Hello\", said Jimmy O\'Toole.

Bu tabii ki çok eğik vardır.

Giriş kaçtı HTTP POST aracılığıyla gelirse Yani, (My) SQL için güvenli hale getirmek için tekrar kaçmak zorunda mı? Yoksa sadece burada belirgin bir şey göremiyorum?

Herhangi bir yardım için şimdiden teşekkür ederiz.

5 Cevap

Ah, harikalar magic quotes. Bu POST formları bu gereksiz kaçar yapıyor. Siz devre dışı bırakmak (veya nötralize) onları, ve baş ağrısı birçok uzağa gitmek gerekir.

http://www.sitepoint.com/blogs/2005/03/02/magic-quotes-headaches/: İşte konunun örnek bir makale bulunuyor

Recap:, sihirli tırnak devre dışı kullanmak real_escape_string().

Bunun yerine kaçan güvenmek ben parametrized SQL sorguları kullanmak ve mysql sürücü ihtiyacı kaçan ne yapalım istiyorum.

Bölü sizin ilk seti nereden geldiğini budur - PHP sunucu Magic Quotes özelliği etkinleştirilmiş var gibi görünüyor. Teorik olarak, daha sonra kaçış işlevleri çağırmak gereksiz olmalı - ama app devre dışı sihirli tırnak ile bir sunucu üzerinde çalışır zaman değil düşünürken, aniden SQL enjeksiyon geniş açık.

Chakrit yazdığı gibi, kaçan kendinizi korumak için en iyi yol değildir - Bu kullanıcı için çok daha güvenli parameterized queries.

Belirgin bir hacker için anahtar kelimedir.

Ben normalde kaçan yeterli olması gerektiğini düşünüyorum, ama karşı koruma just tırnak yeterli olmayabilir.

SQL Injection cheatsheet, çalıştırmak ve çok slahses iyi bir şey olup olmadığını görebilirsiniz test iyi bir liste bu bkz.

Ve yani sayısal alanlar ve datetime alanları gibi kolayca dizeleri olarak enjekte edilebilir, çok değerlerin başka türlü kaçmak için unutma.