2026/4/20
忍者AdMaxはCSPが利用できない
結論
忍者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;発生したエラー
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