LoginSignup
0
0

More than 1 year has passed since last update.

【2022年版】HTMLのソースをphpで見れなくする方法 (view-source:対策済)

Last updated at Posted at 2022-05-08

言い訳を言わせてくださいなの。

HTMLソースが見られたくないわけではありません。

HPに掲載している画像とかを悪用されるのを防止するためです。その悪用はコピーして使われることではなくて、画像直リンを使用して、匿名掲示板で使われることでもあったり。。。。

別にそれなら.htaccessで制御すればいいのでは?

究極のHTMLを見れなくする方法

実際にはこんなHTMLがご覧になることができるだけで、大して意味ないと思います。

image.png

具体的なコード

functions.php
<?php
	if($_COOKIE["namae"] >= 1) {
	} else {
		header('Cache-Control: max-age=0');
		header('Cache-Control: no-store, no-cache, must-revalidate' );
		header('Cache-Control: post-check=0, pre-check=0', FALSE );
		header('Pragma: no-cache');

		if($_SERVER['HTTP_REFERER'] == "") {
			$redirecturl=(empty($_SERVER["HTTPS"]) ? "http:$footerimgmargin/" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
			echo <<<HTML
<!doctype html><html><head><meta http-equiv="refresh" content="0;URL=$redirecturl"></head></html>
HTML;
			exit;
		}
	}
?>

仕組み

  • キャッシュを完全に無効にすることで、今表示しているhtmlが消えています。
  • HTTP_REFERERを確認して(リンク元はどこでも良い)、直接 view-source:http://url .. って入力されていないことを確認する
  • もし、きちんとした閲覧ソフトであれば、refresh によってHTTP_REFERERが加えられ、正しく表示される。
  • キャッシュが生きているサーバーでは使用できません。
  • おまけとして、cookieに namae=1 が入っていると、正しいソースが表示されます。

問題点もあります。

  • サイトがhttps運用でも、自家サーバーで オレオレSSL運用で https://localhost/ やその他名前でアクセスできるサーバーがある場合、そこからリンクすることで見れる場合があるかもしれません。
  • ダウンロードツールで転送先のURLを追跡されたら、HTMLが見れてしまいます
  • HTMLに最大2回程度の過剰アクセスが発生する
  • HTTP_REFERERをブロックしている環境では無限ループが発生します。cookieを利用した対処法がよさそうです。
  • ↑の対処を行うと、一部のブラウザで生のソースが見れてしまいます。
  • そもそもHTMLソースを見れる専用アプリでは見れてしまうかも。
  • そもそも、SEO悪くなるかもしれません

ということで、できたのは良いですが、SEOの問題で利用却下

残念ながら、下記のjQueryを拡張した上で、サイトポリシーに同意した上で、ソース表示を認めるという手段をとってみました。

それ以外の対処

  • F12
  • Ctrl + C、X、V、U
  • Ctrl + Shift + C、I、J、K
  • contextmenu copy paste drag drop

もブロックしておくべきです。

このブロックも同時に行っておかないと、結局ソースが表示されます。

jqueryblock.js
$(window).keydown(function(e){
	if(	e.ctrlKey && 
			(
				e.keyCode === 85	// Ctrl+U
			 ||	e.keyCode === 67	// Ctrl+C
			 || e.keyCode === 88	// Ctrl+X お問い合わせフォームがある場合除外したほうがよい
			 || e.keyCode === 86	// Ctrl+V お問い合わせフォームがある場合除外したほうがよい
			)
		|| e.keyCode === 123		// F12
		|| e.ctrlKey && e.shiftKey &&
			(
				e.keyCode === 73	// Ctrl+Shift+I
			 || e.keyCode === 74	// Ctrl+Shift+J
			 || e.keyCode === 75	// Ctrl+Shift+K
			 || e.keyCode === 67	// Ctrl+Shift+C
			)) {
			return false;
	}
});
$(document).bind("contextmenu copy paste drag drop", function() {
	return false;
});

``
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0