Closed1

Attention to Japanese Beginners

myon🐍🎞myon🐍🎞

😎Summary😎

🊜コメントアりトや暙準出力の利甚であっおも、プログラム内ではできるだけ英数字以倖の文字を䜿わないようにしたしょう🊜

🫶Notice🫶

゜ヌスコヌドはGitHubより取埗できたす(単䞀.pyファむル)

👟↓のREADMEにこの蚘事ず党く同じこずが曞かれおいたす👟
https://github.com/myon-bioinformatics/AttentionToJapaneseBeginners

python main.py

🚎‍♀(JSP)

  1. アルファベットじゃない文字を䜿うずそれが原因で問題が起こるこずがありたす。
  2. 今回は、Shift_JISが゚ンコヌドもしくはデコヌドされた時を䟋にしたす。
  3. ちなみにこのプログラム(main.py)は成功䟋のため、問題は基本的に起こりたせん。

😖Cause & 😆Countermeasures

😖Cause

🚎‍♀(JSP)

🀖以䞋がその原因です🀖☞

  • 芋かけ䞊は1぀の文字であっおも、実際には2バむト以䞊であるこずが原因で問題が起こるこずがありたす。

  • Shift_JISSJIS、cp932の文字コヌドでは、2バむト目が0x5cの「\」バックスラッシュを含む文字が代衚的です。

  • 広矩の意味では、2バむト目が0x7cの「|」パむプ文字や、2バむト目が正芏衚珟などのメタ文字ず重なる文字も含みたす。

🍮at length🍮

🚎‍♀(JSP)

  • 䟋えば、「胜」ずいう文字の2バむト目は「\」です。

  • それは行末に「\」ず曞かれおいるこずず同矩になりたす。

  • C蚀語では、これによっお次の行たでがコメントアりトされおしたいたす。

Example include those with a second byte of "\"(0x5c)

è¡š: b'\x95\\'
胜: b'\x94\\'
十: b'\x8f\\'

😆Countermeasures

🚎‍♀(JSP)

🥷解決策は意倖ず単玔🥷

  • コメントアりトの文末に"."(ピリオド)などを぀ける: 「簡単」
  • ゚ンコヌド/デコヌド時の文字コヌドを「UTF-8」などにする: 「通垞」
  • そもそも英数字以倖はできるだけ䜿わない: 「重芁」

📝The Result of Standard Output📝

🚎‍♀(JSP) ☕以䞋の䟋はmain.pyを実行した時の成功䟋の結果です☕

----------------
Called function: standard_output_harmless_shift_jis
る: b'\x82\xe9'
た: b'\x82\xbd'
蚘: b'\x8bL'
〆: b'\x81Y'
胜.: b'\x94\\.'
a: b'a'
1: b'1'
----------------
Called function: standard_output_harmful_shift_jis
è¡š: b'\x95\\'
胜: b'\x94\\'
十: b'\x8f\\'
法: b'\x96@'
充: b'\x8f['
型: b'\x8c^'
斜: b'\x8e{'
倍: b'\x94{'
本: b'\x96{'
図: b'\x90}'
----------------
Called function: print_harmless_shift_jis
No problem!!
----------------
Called function: print_harmful_shift_jis
No problem!!

Warning If a problem were occured, "print("No problem!!") at Called function: print_harmful_shift_jis" wouldn't function.

Addendum

🚎‍♀(JSP)

⚠「main_to_shift_jis.py」は、「main.py」をUTF-8ではなくShift_JISで゚ンコヌドしたファむルです。

🧁Mojibake in detail🧁

  • 🀥main.py🀥

easy_separator = easy_separator_closure()() #これはクロヌゞャずいう機胜

  • 😵‍💫main_to_mojibake.py(Even the Japanese speaker can't read)😵‍💫

easy_separator = easy_separator_closure()() #繧繝繝繧繝繧剃逕瞺励◆

🚎‍♀日本語話者に向けお

はじめに

日本語をコメントや暙準出力等で利甚しおる方向けぞの説明なので、どちらかずいえばコヌドよりもこちらの説明が本題かもしれたせんね。

今回はコメントアりトの皮類(# or """ """)ずは関係ないPythonで実装したので、芋かけ䞊は問題ないように芋えたす。

昔に比べるず芋かける機䌚が枛りたしたが、「繧繝繝繧繝繧剃逕瞺励◆」のような文字化けを目にしたこずはございたすか

こうした理解できない倉換の原因の䞀぀には、䞊に挙げた文字コヌドの違い(Shift_JISなど)に倉換されたずきに生じるこずがありたす。

䞀番䌝えたいこず

もちろん、正しい文字が反映されおない問題も気にすべきこずなのですが、挙動が倉わるのは芖芚的の圱響のみずは限りたせん。

今回のレポゞトリで最も匷く䌝えたいこずはコメントアりトの英数字以倖の文字が圱響しお挙動が倉曎するこずがあるずいうこずです。

以䞋のような事䟋がありたす。

  1. ポケットモンスタヌ「赀」「緑」における裏技(バグ)
  2. 「この行のコメントを消すずなぜかわからないけど動かなくなる」ずいう珟象
  3. ゚スケヌプ凊理をしたはずのコヌドに発芋された脆匱性(䞀郚の事䟋)

こうした事䟋の原因の䞀぀にコメントアりトが英数字以倖だったずいうケヌスがありたす。

たた、フロント゚ンド、バック゚ンドなど関係なく以䞋のコメントアりトを残しおる方がいたす。

  • #これは〇〇ずいう機胜
  • #技術的に実装可胜
  • #〇〇の関数は出力する、䟋 埓業者リスト、売䞊衚

本音はね...

セキュリティ゚ンゞニアずしおデバッグ機胜が残っおるかコヌドをチェックする際によく目にする他、

その埌の実装されなかった/廃止したメ゜ッドもコメントアりトを残しおるケヌスも決しお珍しくありたせん。。

ただ、幞運にもほずんどのケヌスでは条件が難しすぎお珟実的でないので、脆匱性蚺断時には「情報」で枈んでいたす。

ただ、こちらずしおも仕事量はないに越したこずはないので。。

「せめお”."(ピリオド)でも぀けおくれたらなぁ」 ず感じるこずがございたす。😶‍🌫

今回は目を匕くためにBeginnersずわざわざ曞きたしたが、実際は䞭䞊玚者でもよくありたす。。

むしろ、䞍勉匷な䞭䞊玚者ほど今たでのやり方に固執しお厄介ごずを増やしおるケヌスがあるので、

せめお賢い䞭䞊玚者ずこれからの初孊者の方々には気を付けおいただきたいです。。😮‍💚

最埌に

これからたすたすセキュリティが幟床ずなく叫ばれるこずになるず思いたすが、

脆匱性ず原因の倧半は、(叀い方から数えたほうが早い)蚭蚈・実装時のヒュヌマン゚ラヌです。

䞍幞なこずにレガシヌな蚀語ほどそれがどうしようもないレベルたであるため、

銀行、官公庁などのレガシヌシステムのコヌドの改修、リバヌス゚ンゞニアリングなどは特に苊劎を匷いられるだろうな。。🀑

できれば英語で、、ず蚀いたいずころですが、、

”."(ピリオド)ひず぀で問題の解決・軜埮な脆匱性の察凊が可胜なこずがあるので、

もしもに備えお頭の片隅に入れおおくず圹立぀こずがあるかもしれたせんね😊

参考

このスクラップは2023/06/24にクロヌズされたした