2026/4/20

忍者AdMaxはCSPが利用できない

web開発

結論

忍者AdMaxはunsafe-evalなしでは動かせなかった。

やりたかったこと

以下のサイトにCSP(Content Security Policy)を厳しくしたまま「忍者AdMax」の広告を入れようと頑張りました。
私が制作したサイト「らくらく扶養簿」(https://fuyobo.tako-dev.com)

実際のCSP設定

エラーログを見つつ次のようにCSPを調整しました。
script-srcに以下のように設定。

script-src 'self' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://unpkg.com https://static.cloudflareinsights.com https://*.shinobi.jp https://cnobi.jp https://dmp.im-apps.net https://audiencedata.im-apps.net; frame-src https://*.shinobi.jp https://*.admax.ninja;

発生したエラー

Terminal window
Uncaught EvalError: Evaluating a string as JavaScript violates the following Content Security Policy directive because 'unsafe-eval' is not an allowed source of script: script-src 'self' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://unpkg.com https://static.cloudflareinsights.com https://*.shinobi.jp https://cnobi.jp https://dmp.im-apps.net https://audiencedata.im-apps.net".

調査したこと

evalは以下の外部javascriptコードで使われていました

Passback.prototype.render = function(result) {
var response = eval("(" + result.response + ")")
, request_id = this._dataset.add(response);
request_id && this.call(request_id)
}

response にはサーバーから返ってきたJSON文字列が入っており、それを eval() でパースしてオブジェクトに変換しています。本来であれば JSON.parse() を使えばCSPに違反せず同じことができますが、忍者AdMax側のライブラリが eval() を使用しているため、こちら側でどうにかすることはできませんでした。

なぜunsafe-evalが必要か

eval() はCSPにおいてデフォルトで禁止されています。これは、文字列として渡された任意のコードを実行できるため、XSS(クロスサイトスクリプティング)などの攻撃に悪用されやすいからです。

CSPで eval() を許可するには、script-src'unsafe-eval' を明示的に追加する必要があります。ただし名前の通り「安全ではない」指定であり、これを許可するとCSPによるXSS対策の効果が大きく下がってしまいます。

また、忍者AdMaxの公式ページにおいて、CSP設定を無効にするように掲載されているようです。
https://www.ninja.co.jp/admax/help/faq/14005/

セキュリティ的な判断

「らくらく扶養簿」では、認証機能などを使ったりWebストレージを使用したりしているため、忍者AdMaxは断念。

おわりに

今回制作したサイト 「らくらく扶養簿」の広告はひとまずあきらめることにしました。
ちょっとでも収入欲しかったなあ…(´・ω・)
ほかの選択肢としてGoogle Adsenseなどあるようですが、こちらもCSPは原則unsafe-evalが必要なようです。
https://support.google.com/adsense/answer/16283098?hl=ja