Bir kullanıcı oluşturulan SQL-regex SQL enjeksiyon kaçınmak

3 Cevap php

Ben kullanıcı yazık ki bir MySQL fıkra kullanılacak bir regex sağlamak için bir site kuruyorum. Ve tabii ki ben SQL enjeksiyonu önlemek için kullanıcı girişi doğrulamak zorunda. Site PHP yapılmış ve benim regex denetlemek için aşağıdaki regex kullanılmasıdır:

/^([^\\\\\']|\\\.)*$/

This is double-escaped because of PHP's way of handling regexes. The way it's supposed to work is to only match safe regexps, without unescaped single quotes. But being mostly self-taught, I'd like to know if this is a safe way of doing it.

3 Cevap

Eğer hazır deyimleri kullanıyorsanız, SQL enjeksiyon imkansız olacaktır. Her zaman hazır ifadeler kullanmak gerekir.

Roborg yaklaşık pahalı regexes rağmen mükemmel bir nokta yapar.

Sadece mysql_escape_string veya mysql_real_escape_string ile dize geçmelidir.

Ama herhangi bir eski regex kabul dikkatli olurdum - bazıları uzun süre çalıştırmak ve DB sunucu kravat olacaktır.

Dan Pattern Syntax:

Beware of patterns that contain nested indefinite repeats. These can take a long time to run when applied to a string that does not match. Consider the pattern fragment (a+)*

This can match "aaaa" in 33 different ways, and this number increases very rapidly as the string gets longer.

Bu ekranın amacıyla anly bu belgeli ifade ise çoğu program sadece Html Encode değeri ve mağaza DB ve dışarı yolda sonra Decode. Bu gönderildikten reg exp kullanmak gerekiyorsa yine sadece Display amaçlı olsa da, çalışmaz.

Ayrıca orada SQL yazma enjekte üzerinde kişi niyet, bu varbinary dönüştürür ve ben geçmişte ile vurmak olmuştur sorgu taban 64 temsil ile exec komutunu gönderen bir yöntem olduğunu biliyorum.