【☠️危険なプログラム☠️】"何回閉じても無駄ですよ〜"と無限にアラートを出すサイトのコードを添削してみた。

新作書きました↓
[☠️†卍️ 兵庫県警に補導される難解スクリプト️ ️卍†☠️](https://qiita.com/redshoga/items/1c7b82284519fa3435c6)

# ☠️元ネタ☠️
[不正プログラム書き込み疑い補導｜NHK 兵庫県のニュース](https://www3.nhk.or.jp/lnews/kobe/20190304/2020003239.html)

# まず該当のURLからソースを取ってくる

```sh
curl http://n41050z.web.fc2.com/burakura.html > burakura.html
```

```html:burakura.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無題</title>
<SCRIPT LANGUAGE="JavaScript">
for ( ; ; ) {
window.alert("　∧_∧　ババババ\n（ ・ω・)=つ≡つ\n（っ ≡つ=つ\n`/　　)\n(ノΠＵ\n何回閉じても無駄ですよ～ww\nm9（＾Д＾）プギャー！！\n　byソル (@0_Infinity_)")
}
</SCRIPT>
</head>
<body />
</html><script type="text/javascript"><!--
var fc2footerparam = 'charset=' + (document.charset ? document.charset : document.characterSet) + '&url=' + document.location + '&service=0&r=' + Math.floor(Math.random()*99999999999);
var fc2footertag = '<' + 'script src="//vip.chps-api.fc2.com/apis/footer/?' + fc2footerparam + '" charset="UTF-8"><' + '/script>';
document.write(fc2footertag);
//--></script>
<!-- FC2, inc.-->
<img src="//media.fc2.com/counter_img.php?id=50" style="visibility:hidden" alt="inserted by FC2 system" width="0" height="0">
<!-- FC2, inc.-->
```


`</html>`から以下はFC2によって自動的に付与されるものだと思われるからそれを除いた以下のソースを添削していく。

```html:burakura.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無題</title>
<SCRIPT LANGUAGE="JavaScript">
for ( ; ; ) {
window.alert("　∧_∧　ババババ\n（ ・ω・)=つ≡つ\n（っ ≡つ=つ\n`/　　)\n(ノΠＵ\n何回閉じても無駄ですよ～ww\nm9（＾Д＾）プギャー！！\n　byソル (@0_Infinity_)")
}
</SCRIPT>
</head>
<body />
</html>
```

# 添削

## DOCTYPE宣言

HTMLやXHTMLのどのバージョンで作成されているかを宣言するため最初の行に`<!DOCTYPE html>`を追記するべき。

```html
<html>
↓
<!DOCTYPE html>
<html>
...
```

## script内のlanguage属性

script内のlanguage属性はobsoleteなので削除したほうがいい。

```html
<SCRIPT LANGUAGE="JavaScript">
...
</SCRIPT>
↓
<SCRIPT>
...
</SCRIPT>
```

## `<body />`

これだとSelf-closing構文になってしまう。 
bodyは空の要素ではないため(コンテンツを持つ要素であるため)、開始タグの`<body>`と解釈されてしまう。

そのために以下のように修正するとよい。

```html
<body/>
↓
<body></body>
```

参考: 

- [HTML 5.2: 8. The HTML syntax](https://www.w3.org/TR/html5/syntax.html#start-tags)
- [html - Are (non-void) self-closing tags valid in HTML5? - Stack Overflow](https://stackoverflow.com/questions/3558119/are-non-void-self-closing-tags-valid-in-html5)

## lang属性
`<html>`にはlang属性をつけることが推奨される。

```html
<html>
↓
<html lang="ja">
```

## メタタグ
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

HTML5では上記のままで問題ない。
charset属性を使用すれば以下のよう短くかける。

<meta charset="UTF-8">

```html
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
↓
<meta charset="UTF-8">
```

参考: [`<meta>`－HTML5タグリファレンス](http://www.htmq.com/html5/meta.shtml)

## SCRIPTタグ

XHTML1.0では大文字(UPPER CASE)でかくべきだが、HTML4.01以降から区別されない。

問題はないが、他のタグと統一性を保つために小文字で描くべき。


```html
<SCRIPT>
...
</SCRIPT>
↓
<script>
...
</script>
```

参考: [タグは大文字・小文字どちらで書くべき？ - タグHTML](http://taghtml.com/basic/howtowritehtmltag.html)

## for(;;)

`for(;;) ...`でも無限ループになるが、可読性のために`while(true) ...`を使った方がいい。

```javascript
for ( ; ; ) {
↓
while (true) {
```

## AA文字列
AAを1行で書いているために可読性が低い。
`+`で連結したほうが見やすい。

```javascript
window.alert("　∧_∧　ババババ\n（ ・ω・)=つ≡つ\n（っ ≡つ=つ\n`/　　)\n(ノΠＵ\n何回閉じても無駄ですよ～ww\nm9（＾Д＾）プギャー！！\n　byソル (@0_Infinity_)")
↓
window.alert(
    "　∧_∧　ババババ\n" +
    "（ ・ω・)=つ≡つ\n" +
    "（っ ≡つ=つ\n" +
    "`/　　)\n" +
    "(ノΠＵ\n" +
    "何回閉じても無駄ですよ～ww\n" +
    "m9（＾Д＾）プギャー！！\n" +
    "　byソル (@0_Infinity_)"
)
```

## インデント
インデントをつけた方がいい。

# 添削結果

```brakura.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>無題</title>
    <script>
      while (true) {
        window.alert(
          "　∧_∧　ババババ\n" +
          "（ ・ω・)=つ≡つ\n" +
          "（っ ≡つ=つ\n" +
          "`/　　)\n" +
          "(ノΠＵ\n" +
          "何回閉じても無駄ですよ～ww\n" +
          "m9（＾Д＾）プギャー！！\n" +
          "　byソル (@0_Infinity_)"
        );
      }
    </script>
  </head>
  <body></body>
</html>
```

# ちなみに

以下だけでも動く。

```hoge.html
<script>
  while (true) {
    window.alert(
      "　∧_∧　ババババ\n" +
        "（ ・ω・)=つ≡つ\n" +
        "（っ ≡つ=つ\n" +
        "`/　　)\n" +
        "(ノΠＵ\n" +
        "何回閉じても無駄ですよ～ww\n" +
        "m9（＾Д＾）プギャー！！\n" +
        "　byソル (@0_Infinity_)"
    );
  }
</script>
```

# 余談
なんで無限アラートのURL貼っただけで書類送検になるんですかねぇ...
ウェブ開発してるときにバグ発生したら捕まる世界になるのかな:thinking: