2017-07-14 11 views
0

私はブラインドSQLインジェクションについて学んでいます。この私のスクリプトの一部です:なぜ私はPython文字列でバックスラッシュを取得する

... 
datas = {"username":"admin","password":"\'or pass like \"x%\" --"} 
res = requests.post(url,data=datas).content 
... 

文字列"password":後に私が''or pass like "x%" --'のようなものを(期待して印刷するときに、実際に、私はこれはOKになります見ているかどうかわからない、Pythonは明らかに変化し、単一引用符で始める必要があります単一のものへの二重引用符)。しかし、私は'\'or pass like "x%" --'を得る。

+2

文字列にバックスラッシュが含まれていません。文字列の* repr表現*にはバックスラッシュが含まれています。これは、文字列を生成した元の文字列リテラルにバックスラッシュを入れる必要があるのと同じ理由からです。文字列の 'repr'表現は文字列を再現する文字列リテラルであると考えられます。 – user2357112

+0

これはおそらく 'str'と' repr'の関係です。 –

答えて

3

Pythonで文字列を書くときは、"write them with double quotes"または'write them with single quotes'のいずれかを選択できます。文字列に使用した引用符と一致する引用符だけをエスケープする必要があります。したがって、'This "is" a valid string'ですが、これらの二重引用符を一重引用符に変更するには、'You \'need\' to do this'としてください。だから、あなたの文字列では、二重引用符で囲まれた文字列があるので、二重引用符を正しくエスケープしていますが、一重引用符をエスケープする必要はありません。

\'はまだPythonで正しく解釈されているため、問題はありません。エスケープ文字として印刷しているだけなので、文字列の末尾ではなく文字'であることがわかります。

>>> "\'\"" 
'\'"' 
>>> print("\'\"") 
'" 
関連する問題