SORU
19 AĞUSTOS 2008, Salı


Giriş Python kullanarak Sanitising kullanıcı

Python tabanlı bir web uygulaması için kullanıcı girişi sterilize etmek için en iyi yolu nedir? Tek bir işlevi HTML karakterler ve diğer gerekli karakter kombinasyonu XSS veya SQL enjeksiyonu saldırısı mümkün değildir emin olmak için kaldırın.

CEVAP
24 AĞUSTOS 2008, Pazar


Burada attribues beyaz onclick kullanamazsınız () beyaz liste ve etiket özellikleri değil, tüm etiketleri kaldırmak bir parçacık.

href="javascript:...", kullanarak insanları engellemek için öznitelik değerleri normal ifade ile http://www.djangosnippets.org/snippets/205/ ve diğer davalar http://ha.ckers.org/xss.html açıklanan değiştirilmiş bir versiyonudur.
(<a href="ja vascript:alert('hi')"> örneğin <a href="ja vascript:alert('hi')"> vb.)

Gördüğünüz gibi, (harika) BeautifulSoup kütüphane kullanır.

import re
from urlparse import urljoin
from BeautifulSoup import BeautifulSoup, Comment

def sanitizeHtml(value, base_url=None):
    rjs = r'[\s]*(&#x.{1,7})?'.join(list('javascript:'))
    rvb = r'[\s]*(&#x.{1,7})?'.join(list('vbscript:'))
    re_scripts = re.compile('(%s)|(%s)' % (rjs, rvb), re.IGNORECASE)
    validTags = 'p i strong b u a h1 h2 h3 pre br img'.split()
    validAttrs = 'href src width height'.split()
    urlAttrs = 'href src'.split() # Attributes which should have a URL
    soup = BeautifulSoup(value)
    for comment in soup.findAll(text=lambda text: isinstance(text, Comment)):
        # Get rid of comments
        comment.extract()
    for tag in soup.findAll(True):
        if tag.name not in validTags:
            tag.hidden = True
        attrs = tag.attrs
        tag.attrs = []
        for attr, val in attrs:
            if attr in validAttrs:
                val = re_scripts.sub('', val) # Remove scripts (vbs & js)
                if attr in urlAttrs:
                    val = urljoin(base_url, val) # Calculate the absolute url
                tag.attrs.append((attr, val))

    return soup.renderContents().decode('utf8')

Başka posterler de dediği gibi, hemen hemen bütün Python db kütüphaneleri bu gayet iyi karşılar yani SQL enjeksiyon ilgilen.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BachelorsPadTv

    BachelorsPad

    17 Ocak 2012
  • HTC

    HTC

    12 Ocak 2006
  • michal lelkowski

    michal lelko

    9 Temmuz 2006