リファラーの偽装について補足させてください。偽装の可否は以下のようになります。
閲覧しようとしている当人: リファラーの偽装が可能
閲覧しようとする人は別人: リファラーの偽装は不可能
つまり、悪い人がサイトを作って、notshow.php への直リンクを貼ったとして、そのサイトを閲覧した人が自らリファラーを偽装することは可能ですが、そうするシチュエーションが思いつきません。通常は、サイトを閲覧する人はリファラーの偽装などしないでしょうから、正しいリファラーが送られてくるか、リファラーが送られてこないことは、ある程度想定してもよいでしょう。
一方、サイトを作った人が、直リンクの際に別のリファラーが送信されるようにHTMLを書くことはできません。このために、CSRF対策として、リファラーを使う方法が有効なのです。
「ある程度想定してもよい」と書きましたが、ここに絶対性を求めることはできません。前述のように、アセスする当人は偽装が可能だからです。したがって、直リンク禁止の目的が、「概ね禁止できればよい」なのか、「絶対に直リンクにてアクセスされると困る」かによって判断が変わってきます。たとえばサイトで用いている画像を他サイトから直接<img>タグで使われたくない…が、多少の直アクセスは許容可能という場合は、リファラーによる制御もあり得るということです。
加えて補足が2点あります。
まず、現在提示されている方法ですと、リファラーがない場合をエラーとしていますが、これは不適切です。「直リンク」の場合は、リンク元のURLがリファラーとして設定されるので、リファラーは空ではないからです。したがって、このようなチェックの場合は、リンクしてよいURLやドメイン名を基準とした、いわゆるホワイトリストチェックを書く必要があります。
また、別の方が指摘されているように、ブラウザの設定やプラグイン、セキュリティソフトなどにより、リファラーを常に送信しないように設定している人もいます。リファラーによるチェック処理を置くと、本当は直リンクでない正当なアクセスなのに、このチェックでエラーにされて閲覧できない人が出てきます。
したがって、リファラーによるチェックは、企業内システムなど閲覧する人のブラウザの設定等が想定できる場合のみ用いるとよいでしょう。
結論としては、リファラーによるチェツクはまったく無意味というわけではないものの、完全ではないことと、正当な利用者まで拒否してしまう場合があるので、あまり推奨されない、というのが結論です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。