2010-03-03 13 views
33

"regex güvensiz izin vermeyecek":Amacı ben jslint aracılığıyla çalıştırdığınızda aşağıdaki hatayı alır kod satırını sahip seçenek

Bu hata jslint opsiyonu sayfasından aşağıdaki açıklamaya bakın görünüyor
Lint at line 604 character 48: Insecure '^'. 
numExp = parseInt(val[1].replace(/[^\-+\d]/g, ""), 10); 

:

"true if . and [^...] should not be allowed in RegExp literals. 
These forms should not be used when validating in secure applications." 

İstemci tarafında javascript uygulamasının gerçekten güvenli kabul edilebileceğini anlamıyorum. En çok hava geçirmez rejeks bile olsa, hala ateş böceği gibi bir şey ateşlemek ve yine de değişkeni değiştirmek mümkündür. Gerçek giriş doğrulaması sunucuda yapılmalı ve istemci tarayıcısı muhtemelen ortalama kullanıcı kötüye kullanımı ele alacak doğrulama işlemine sahip olmalıdır.

Bu hatayı yok saymak güvenli midir? İstemci tarafı giriş doğrulaması nedeniyle başvurumun güvensiz olduğu bir açı eksik mi?

cevap

30

"Güvensiz", bu bağlamda "belirsiz" anlamına gelir. . ve [^…] numaralı özel noktaların her ikisi de ifadesinin ifadesinin regex ile eşleşmesi gerektiğini açıkça belirtmiyor. Doğrulama amacıyla, bu , düşünmediğiniz ve istemediğiniz şeyleri başarılı bir şekilde eşleme riskini öneriyor (düşünün: beyaz listeye karşılık kara liste).

Her durumda, nokta ve özel aralık, normal ifadenin geçerli bölümleridir ve ihtiyacınız olan şeyi yaparlarsa (bu durumda olduğu gibi), uyarıyı aşırı ihtiyatlı olarak düşünürdüm.

Kötü niyetli bir kullanıcı, istediğiniz zaman sayfa mantığınızla konuşabilir; Uyarı, sayfanın normal çalışması hakkında daha fazladır.

14

size anlatmaya çalışıyor Bütün bu yerine neyi olamaz ait girilebilir belirtmek için genellikle daha iyi olmasıdır.

Bu durumda, normal ifadeniz kötü karakterleri çıkarmaktadır, bu nedenle uyarıyı yok saymak güvenlidir.

İlgili konular