DjangoのWebフレームワーク[ノート] - のModelForm Ajaxの完全なファイルアップロードのコードKindEditor XSS攻撃シングルトン他のトランザクション操作

注1:ファイルアップロードコードKindEditorのModelFormサブクラスAjaxのフルセット

要約:
	
	モデル
		-データベース操作
		-検証
		クラスA(モデル):
			ユーザー= 
			メールに= 
			PWD = 
		
	Form1の
		- LoginFormクラス(をForm1):
			メールfields.EmailField =()で
			ユーザー= 
			PWD = 
			
		- IS_VALID - >正則各フィールド(通常のフィールド内蔵)+ clean_フィールド- >クリーン(__ all__) - > _post_clean 
		- cleand_data 
		-エラー
	-------->推奨<--------- 
		
、のModelFormの
	参考ブログ:
		HTTP:/ /www.cnblogs.com/wupeiqi/articles/6229414.html 
	
	モデルをForm1 = +> +検証データベース操作
	-クラスLoginModelForm(XXXXX):
		 model.Aのフィールドを使用して
		 
	1はHTMLタグを生成する:メタ-クラス:... 
	2デフォルト値(エディタ)を生成:MF = xxxModelForm(インスタンスを= ModelObj)
	3.追加のラベル(無料ログ]チェックボックス)、is_rmb = Ffields.CharField(= Fwidgets.CheckboxInputウィジェット())
	4.さまざまな認証IS_VALID() - > ...さまざまなフッククリーン
	5. mf.save( )
		#ビューソースコード解析:
		#または
		インスタンス= mf.save(偽)
		instance.save()
		mf.save_m2m()
	しっかりと小さなプログラムに適したフォームと結合6.model、大きなプログラムはそれを使用しません。

二、Ajaxの
	参考ブログ:
		http://www.cnblogs.com/wupeiqi/articles/5703697.html 
	
	ネイティブ
		
	jQueryの
	
	擬似Ajaxの動作
	
	タイミング:
		送信されたデータは、[通常]の場合- > jQueryの、XMLHttpRequestを、IFRAME 
	
第三に、ファイルのアップロード(プレビュー)
	
	-フォーム提出
	- Ajaxのファイルをアップロードする
	
	タイミング:
		あなたは、[ファイル]を送信した場合- > IFRAME、jQueryの(いるFormData) 、XMLHttpRequestを(いるFormData)、 
	
	
4つの画像認証コードセッション+
	 
	-セッション
	- check_code.py(依存:まくらモジュールとフォントファイル) 
		http://127.0.0.1:8000/backend/base-info.html
	? - src属性の後ろにプラス



ファイブ、CKEditorバージョン、UEEditor、TinyEditor、KindEditor (***) 
	参考ブログ:
		http://www.cnblogs.com/wupeiqi/articles/6307554.html 
		
	-基本的な使用
	-ファイルのアップロード、複数ファイルのアップロード、ファイルスペース管理
	- XSS攻撃(フィルタ機能またはクラス)、次のレッスン...言った
	
:仕事

	のマスター:
		http://127.0.0.1:8000/ブログホーム
		http://127.0.0.1:8000/zhaofan/ 1.html誰かのブログ
	個人的なブログ:
		http://127.0.0.1:8000/zhaofan.html誰かのブログ
		http://127.0.0.1:8000/zhaofan/tag/python.html誰かのブログスクリーニング
		http://127.0.0.1:8000/zhaofan/catetory/mvc.html誰かのブログのスクリーニング
		スクリーニングhttp://127.0.0.1:8000/zhaofan/date/2011-11.html誰かのブログ
	の管理人を:
		http://127.0.0.1:8000/backend/tag.html 
		http://127.0.0.1:8000/backend/category.html
		http://127.0.0.1:8000/backend/article.html 
		http://127.0.0.1:8000/backend/add-article.html

検証コード

URLを:

#必要な書類:
#(1)check_code.py(2)Monaco.ttfフォントファイル(3)HTMLファイルの
URL( '^チェックコードの$'、views.checkcode)、      URLページ#ユーザアクセス(単体コード新しいURL ) 
URL( '^ radom_code'、views.radom_code)、    は、遠位POSTコードの検証URLを提出しました

ビュー:

###################################コードする例示的な############ ###################は、
メモリから読み出されたIO#インポートBytesIOから
utils.check_codeインポートcreate_validate_codeのから
:DEFチェックコード(要求)
    "" " 
        コード
        :PARAM要求:
        :リターン:
    "" " 
    。#= オープンデータ( '静的/ IMGS /アバター/ 20130809170025.png'、 'RB')(読み)
    位のHttpResponse(データ)が返す

    ファイル#の方法を読んで-感謝の思考の中心
    #1インストール画面枕を作成PIP3の
    #2は、画像内のランダムな文字列を書き込みます
    。#OBJ =オブジェクト()
    画像ファイルを定式化するために書かれている#3 
    の内容を読んで、オープンディレクトリのファイルを策定#4。を
    #5。のHttpResponseを(データ)
    '' '  
    IMG、コード= create_validate_code()のimg.save('ファイルハンドル''フォーマット」) 
    ファイルへの書き込み#
    オープン= F( 'utilsパッケージ/ uson_checkcode.png'、 'WB')
    img.save(F 'PNG')
    f.close()
    レンダリング(要求、 'radom_code.html')を返す#
    #は、ファイルの読み込み
    リターンのHttpResponseを(オープン( 'のutilsの/ uson_checkcode.png'、 'RB')。読み取る())
    '' ' 
メモリ記憶方法
    メモリから読み出されたストリーム= BytesIO()#
    IMG、コード= create_validate_code()#ページユーザアクセス、作成そして、ユーザに画像や文字列を生成する

    img.save(ストリーム、「PNG」) #のサフィックスは、メモリに格納された画像オブジェクトPNG形式ます
    ますrequest.session [「チェックコード」] =コード位、セッションに格納されている、とユーザーの入力整合性を確認するためにポストを提出する

    リターンのHttpResponse(stream.getvalue())#をメモリからの画像は、ユーザーに返却を受ける入力されたユーザ#名に)入力:check_code 
        code.upper IF()==)(ますrequest.session [ 'チェックコード'上部を行う.:
 
デフradom_code(リクエスト):
    request.method == 'POST'の場合:
        コード= request.POST.get( 'check_code') #の入力は、ユーザ入力された名前である:check_codeの
            印刷(「コードが正しい」)
        他:
            プリント(「エラーコード」) 要求、「day24-app06 / radom_code.html」)レンダリングを返します

HTML:

<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<HEAD> 
    <メタ文字コード= "UTF-8"> 
    <タイトル>タイトル</ TITLE> 
    <スタイル> 
        .checkcode { 
            幅:130px; 
            高さ:33px; 
            国境:1pxの固体赤。
        } 
    </スタイル> 
</ head> 
<body> 
    <DIV CLASS = "チェックコード"> 
        <IMG SRC = "/ cohui /チェックコード"のonclick = "changeCheckCode(この);"> 
    </ div> 
    <スクリプト> 
        関数changeCheckCode( THS){ 
            // ths.src = "/ cohui /チェックコード" + '?'。
    </スクリプト> 
</ HTML>

check_code.py:

#!は/ usr / binに/ envをPythonの
# - * -コーディング:UTF-8 - * - 

インポートランダム

#PIP3は枕をインストール
PILイメージのインポート、ImageDraw、ImageFont、のImageFilterから

_letter_cases = "abcdefghjkmnpqrstuvwxy" #小文字、可能な干渉を取り除きますI、L、O、Z 
_upper_cases _letter_cases.upper =()#大文字の
_numbers = '' .join(マップ( STR、範囲(3,10)))# デジタル
init_chars = '' .join((_ letter_cases、_upper_cases、 _numbers))


DEF create_validate_code(サイズ=(120、30)、
                         文字の=のinit_chars、
                         img_type = "GIF"、
                         MODE = "RGB"、
                         BG_COLOR =(255、255、255)、 
                         fg_color =(0、0、255)、
                         FONT_SIZE = 18であり、
 
                         フォント#1に依存font_type = "utilsの/ Monaco.ttf"、
                         #1 font_type = "Monaco.ttf"、

                         長さ= 4、
                         draw_lines =真、
                         n_line =(1、2)、
                         draw_points =真、
                         point_chance = 2) :
    "" " 
    @todo:検証画像生成
    @paramサイズ:画像サイズ、形式(幅、高さ)を、デフォルト(120、30)
    @paramの文字:使用できる文字のセット、フォーマットストリング
    @paramのimg_type:画像GIFのための任意のGIF、JPEG、TIFFにフォーマットのデフォルトを保存し、PNGは
    モード@param:画像モードを、デフォルトのRGBのある
    @paramのBG_COLOR:背景色、デフォルトは白です
    フォアグラウンド色、文字色コード:@paramのfg_colorデフォルトでは青#0000FFです 
    @paramのFONT_SIZE:コードのフォントサイズ
    @paramのfont_type:フォントコード、デフォルトae_AlArabiya.ttf 
    @param長さ:文字コードの数が
    draw_linesを@param:干渉ドローラインかどうか
    @paramのn_lines:記事干渉回線番号の範囲、タプル形式、デフォルト(1、 2)、真draw_linesにのみ有効である
    @param draw_points:ビデオ干渉の点かどうか
    @paramのpoint_chance:干渉点の発生確率、範囲[0、100]の大きさ
    @return:[0]:PIL画像例の
    @return:[1] :キャプチャ画像列
    "" " 

    幅、高さ=幅と高さのサイズ#
    #は、グラフィックス作成
    = Image.new(MODE、サイズ、BG_COLOR)IMGを
    描く= ImageDraw.Draw(IMG)#ブラシ作成

    )(デフget_charsました:
        「」「」「生成された文字列は、所与の長さのために、リスト形式返す」
        を返すrandom.sample(文字、長さ)

    :DEFのcreate_lines()
        「」「」「ライン干渉を描く」を
        干渉線のLINE_NUM = random.randint(* n_line)#番号

        Iがで(LINE_NUM)レンジ用:
            #出発
            =(random.randint(0、サイズ開始 [1])[0])、random.randint(0、サイズを
            #終点
            端=(random.randint(0、サイズ[0])、random.randint(0、サイズ[1]))
            draw.line([開始、終了] =(0、0、0を埋めます) )

    DEF create_points():
        "" "" "干渉点描画" 
        チャンス=分(100、MAX(0、INT(point_chance)))#サイズ制限[0、100] 

        の範囲(幅)にWの場合:
            時間(高さ)の範囲:
                TMP = random.randint(0、100)
                TMP> 100 IF -チャンス:
                    draw.point((W、H)は、塗りつぶし=(0、0、0))

    create_strsはDEF():
        "" "文字コードを描画" "" 
        c_chars = GET_CHARS()
        それぞれの後に空白文字で区切らSTRを= '%S' % '' .join(c_chars)#

        フォント= ImageFont.truetype(font_type 、FONT_SIZE)
        font_width、font_height = font.getsize(のSTR)

        draw.text(((幅- font_width)/ 3、(高- font_height)/ 3)
                  のSTR、フォント=フォント、= fg_color塗りつぶし)

        リターン'' .join (c_chars)

    IF draw_lines:
        create_lines()
    IF draw_points:
        create_points()
    のSTR create_strs =() 
パターン歪みパラメータ
    1のparams =を- (。、random.randint(1 2))フロート/ 100、
              0、
              0、
              0、
              1 -フロート(random.randint(1、10)。)/ 100、
              フロート/ 500、(random.randint(1、2)。)
              0.001から、
              フロート(random.randint(1、2))/ 500 
              ] 
    IMG = img.transform(サイズ、Image.PERSPECTIVE、paramsは) # 歪み作成

    IMG = img.filter(ImageFilter.EDGE_ENHANCE_MORE)#フィルタを、境界(閾値以上)強化

    戻りIMGを、#1 IMGをSTRS:画像オブジェクト、STRS:確認コードを弦

検証コードファイルクリック

フォントファイルに依存クリック

注2:XSS攻撃シングルトントランザクション操作

XSSフィルタの特別なラベル

依存プロセス:  1つの PIP3インストールbeautifulsoup4 

XSS例:

#!は/ usr / binに/のenv pythonの
# - * -コーディング:UTF-8 - * - 
BS4輸入BeautifulSoupのから


クラスXSSFilter(オブジェクト):
    __instance =なし

    デフ__init __(自己):
        #XSS白名单
        self.valid_tags = { 
            "フォント":[ '色'、 'サイズ'、 '顔'、 'スタイル']、
            'B':[]、
            'DIV':[]、
            "スパン":[]、
            "表":[ 
                'ボーダー' 、 'CELLSPACING'、 'CELLPADDING' 
            ]、
            '番目':[ 
                'COLSPAN'、 'ROWSPAN' 
            ]、
            'TD':【 
                'COLSPAN'、 'ROWSPAN' 
            ]、
            "A":[ 'のhref'、 '目標'、 '名前']、
            "IMG":[ 'SRC'、 'ALT'、 'タイトル']、
            'P':[ 
                '整列' 
            ]、
            "前": [ 'クラス']、
            "時間":[ 'クラス']、
            '強い':[] 
        } 

    @classmethod 
    DEFインスタンス(CLS):
        CLSない場合.__インスタンス:
            OBJ =のCLSは、()
            .__インスタンスをCLS =はobj 
        CLSを返します。 __instanceの

    DEF処理(自己、コンテンツ):
        スープ= BeautifulSoup(コンテンツ、 'lxmlの') 
        すべてのHTMLタグを通じて#ループ
        soup.find_allでタグのため(これ=真を再帰的): はホワイトリストにタグ名かどうかを判断します
            ないself.valid_tagsでtag.name場合:
                tag.hidden =真
                :tag.nameない[ 'HTML'、 '体']であれば
                    tag.hidden = Trueの
                    tag.clear()
                続ける
            #当前标签的所有属性白名单
            attr_rules = self.valid_tags [tag.name] 
            キー=リスト(tag.attrs.keys()) キーでキーの
                キーでないattr_rulesであれば:
                    ・デル・タグ[キー] 

        リターンsoup.renderContentsを()


場合__name__ ==「__main__ 「:
    HTML = "" "<Pクラス="タイトル"> 
                        <B>ヤマネの物語</ B>
                    </ P>
                    <Pクラス=「物語」> 
                        <div要素名=「ルート」> 
                            むかしむかし3人の妹がありました。そしてそれらの名前がなかった
                            <HREF =「http://example.com/elsie」クラス=「姉妹C1」スタイル=「色:赤;背景色:緑;」ID = "リンク1"> <! -エルシー- > </a>の
                            <a href="http://example.com/lacie" class="sister" id="link2">レイシー</a>と
                            <a href="http://example.com/tillie" class="sister" id="link3"> Tilffffffffffffflieする</a>。
                            彼らは井戸の底に住んでいました。
                            <スクリプト>警報(123)</スクリプト> 
                        </ div> 
                    </ P>
                    <Pクラス= "物語"> ... </ P> ""」

    V = XSSFilter.instance()。工程(HTML)
    印刷(V)

単一-__ new__に基づく例示的な実施の形態

#!は/ usr / binに/のenv pythonの
# - * -コーディング:UTF-8 - * - 
BS4輸入BeautifulSoupのから


クラスXSSFilter(オブジェクト):
    __instance =なし

    デフ__init __(自己):
        #XSS白名单
        self.valid_tags = { 
            "フォント":[ '色'、 'サイズ'、 '顔'、 'スタイル']、
            'B':[]、
            'DIV':[]、
            "スパン":[]、
            "表":[ 
                'ボーダー' 、 'CELLSPACING'、 'CELLPADDING' 
            ]、
            '番目':[ 
                'COLSPAN'、 'ROWSPAN' 
            ]、
            'TD':【 
                'COLSPAN'、 'ROWSPAN' 
            ]、
            "A":[ 'のhref'、 '目標'、 '名前']、
            "IMG":[ 'SRC'、 'ALT'、 'タイトル']、
            'P':[ 
                '整列' 
            ]、
            "前": [ 'クラス']、
            "時間":[ 'クラス']、
            '強い':[] 
        } 

    DEF __new __(CLS、* argsを、** kwargsから):
        ""」
        单例模式
        :PARAM CLS:
        :PARAM引数:
        :PARAM kwargsから:
        :リターン""」
        .__インスタンスをCLSない場合:
            OBJ =オブジェクト.__新しい__(CLS、* argsを、** kwargsから) 
            CLS .__インスタンスは=はobj 
        CLS .__インスタンスを返します

    プロセスDEF(セルフ、コンテンツ):
        スープはBeautifulSoup(コンテンツ、「lxmlのを」)= 
        すべてのHTMLタグを横断#
        soup.find_allでタグのために(これがTrue =再帰的): は、ホワイトリストにタグ名かどうかを決定する
            tag.nameないであればself.valid_tags:
                = Trueのtag.hidden 
                tag.nameは、[ 'HTML'、 '体']にされていない場合:
                    tag.hidden = trueを
                    tag.clear()
                を続け
            、現在のラベルホワイトリスト#のすべての属性
            attr_rules = self.valid_tagsを[ tag.name] 
            キー=リスト(tag.attrs.keys())
            キーキーで用:
                IFないattr_rulesにおけるキー:
                    デルタグ[キー]

        soup.renderContents()を返し


ます。if __name__ == '__main__' 
    のhtml = "" "<Pクラス="タイトル"> 
                        <B>ヤマネの物語</ B> 
                    </ P> 
                    <Pクラス="物語"> 
                        < div要素名=「ルートは」> 
                            昔3人の妹があった、と自分の名前であった
                            <のhref =「http://example.com/elsie」クラス=「姉妹C1」スタイル= '色:赤、背景-color:緑;」ID = "リンク1"> <! -エルシー- > </a>の
                            <のhref = "http://example.com/lacie"クラス= "姉妹"
                            <a href="http://example.com/tillie" class="sister" id="link3"> Tilffffffffffffflieする</a>。
                            彼らは井戸の底に住んでいました。
                            <スクリプト>警報(123)</スクリプト> 
                        </ div> 
                    </ P> 
                    <Pクラス= "物語"> ... </ P> ""」

    OBJ = XSSFilter()
    V = obj.process(HTML)
    印刷(V)

 

おすすめ

転載: www.cnblogs.com/uson/p/11606518.html