web-dev-qa-db-ja.com

Python入力サニタイズ

非常に手っ取り早い入力サニタイズを行う必要があり、基本的にすべての_<, >_を_&lt;, &gt;_に変換したいと思います。

文字列を複数回繰り返すことなく、'<script></script>'.replace('<', '&lt;').replace('>', '&gt;')と同じ結果を達成したいと思います。 maketransと_str.translate_(つまり、 http://www.tutorialspoint.com/python/string_translate.htm )を組み合わせて知っていますが、これは1文字からしか変換されません別の文字に。言い換えれば、次のようなことはできません。

_inList = '<>'
outList = ['&lt;', '&gt;']
transform = maketrans(inList, outList)
_

この変換を1回の反復で実行できるbuiltin関数はありますか?

外部モジュールではなく、builtin機能を使用したいと思います。私はすでにBleachについて知っています。

8
notorious.no

cgi.escape()を使用できます

import cgi
inlist = '<>'
transform = cgi.escape(inlist)
print transform

出力:

&lt;&gt;

https://docs.python.org/2/library/cgi.html#cgi.escape

cgi.escape(s [、quote])文字列sの文字 '&'、 '<'、および '>'をHTMLセーフシーケンスに変換します。 HTMLでそのような文字を含む可能性のあるテキストを表示する必要がある場合は、これを使用します。オプションのフラグ引用符がtrueの場合、引用符文字( ")も変換されます。これは、のように二重引用符で区切られたHTML属性値に含めるのに役立ちます。一重引用符は変換されないことに注意してください。

13
Joe Young

文字列を1回ループし、定義した文字を置き換える独自の関数を定義できます。

def sanitize(input_string):
    output_string = ''
    for i in input_string:
        if i == '>':
            outchar = '&gt;'
        Elif i == '<':
            outchar = '&lt;'
        else:
            outchar = i
        output_string += outchar
    return output_string

次に電話

sanitize('<3 because I am > all of you')

収量

'&lt;3 because I am &gt; all of you'
1
FTA

Html.escape()を使用します-cgi.escape()はPython 3で非推奨になりました

import html
input = '<>&'
output = html.escape(input)
print(output)

&lt;&gt;&amp;
0
Michael Dubin