ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルに実装されたオンライン アルバム画像のホットリンクを防ぐ完璧なクラッキング方法

PHP_PHP チュートリアルに実装されたオンライン アルバム画像のホットリンクを防ぐ完璧なクラッキング方法

WBOY
WBOYオリジナル
2016-07-13 09:47:531167ブラウズ

phpで実装されたオンラインアルバム画像のホットリンクを防ぐ完璧なクラッキング方法

この記事では、phpで実装されたオンラインアルバム画像のホットリンクを防ぐ完璧なクラッキング方法について説明します。皆さんの参考に共有してください。詳細は以下の通りです

インターネット フォト アルバム画像アンチホットリンク クラック プログラム - PHP バージョン。このアンチホットリンク クラック バージョンは、現在人気のある、Baidu フォト アルバム、NetEase フォト アルバム、360 I Like などの Web サイトの画像を完全にクラックできます。また、単純な画像アンチも実装できます。 -hotlinking このクラスは、最初にリモートイメージを取得してからクライアントにイメージを送信するため、スペーストラフィックが無駄になると考えられます。トラフィックを節約できます

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

/**

* インターネットフォトアルバム画像アンチリーチングクラッキングプログラム - PHP バージョン

*

* 使用方法:

*

* http://yourdomain/url.php?url=http://hiphotos.baidu.com/verdana/pic/item/baidupicture.jpg&referer=

* URL はクラックする必要がある画像 URL を指します。リファラーは、ソース ドメイン名を表示するように設定する必要のない一部のフォト アルバムと互換性があります。たとえば、ソース アドレスです。通常のブラウジングでは空に設定する必要があるため、現時点ではリファラーを 1 に設定する必要があります

*

* @著者 Snow Fox ブログ

* @バージョン 1.0

* @2012 年 7 月 16 日以降

* @URL http://www.xuehuwang.com

*/

クラスフリヴォラー

{

/**

* HTTP バージョン番号 (1.0、1.1)、Baidu はバージョン 1.1 を使用します

*

* @var 文字列

*/

保護された $version;

/**

* HTTPリクエスト後のレスポンスデータ

*

* @var 文字列形式

*/

保護された $body;

/**

*リモートURLを取得します

*

* @var 文字列形式

*/

保護された$link;

/**

* URL のさまざまなコンポーネントのいずれかを含む配列。

*

* @var 配列

*/

保護された $components;

/**

*HTTPリクエスト中のHOSTデータ

*

* @var 文字列

*/

保護された $host;

/**

* 必要なファイルのパス。

* (例: '/verdana/abpic/item/mygirl.png')

*

* @var 文字列

*/

保護された $path;

/**

* HTTP リファラー、元の URL から追加したもの

*

* @var 文字列

*/

保護された $referer;

/**

* HTTP メソッド、デフォルトは「GET」

*

* @var 文字列

*/

protected $method = 'GET';

/**

* HTTP ポート、デフォルトは 80 です

*

* @var int

*/

保護された $port = 80;

/**

* ストリームのタイムアウト期間

*

* @var int

*/

保護された $timeout = 100;

/**

* 画像のファイル名

*

* @var 文字列

*/

保護された$ファイル名;

/**

* 画像ファイルの ContentType。

* 画像/jpeg、画像/gif、画像/png、画像

*

* @var 文字列

*/

保護された $contentType;

/**

* Frivoller コンストラクター

*

* @param string $link

*/

パブリック関数 __construct($link,$referer='')

{

$this->リファラー = $referer;

// http リンクを解析します

$this->parseLink($link);

// 画像の取得を開始します

$stream = pfsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);

if (!$stream){

header("Content-Type: $this->contentType;");

echo $this->CurlGet($link);

}その他{

fwrite($stream, $this->buildHeaders());

$this->body = "";

$img_size = get_headers($link,true);

ながら (!feof($stream)) {

$this->body .= fgets($stream, $img_size['Content-Length']);

//fwrite($jpg,fread($stream, $img_size['Content-Length']));

}

$content =explode("rnrn", $this->body, 2);

$this->body = $content[1];

fclose($stream);

// このファイルを正しく保存するために 'ContentType' ヘッダーを送信します

// CT が送信されない場合、写真を保存するときに、IE7 で错误 (800700de) が発生します

// Flock、Firefox 则没有这个问题、Opera 没有测试

header("Content-Type: $this->contentType;");

header("キャッシュ制御: max-age=315360000");

echo $this->body;

//保存写真

//file_put_contents('hello.jpg', $this->body);

}

}

/**

* HTTP リクエストヘッダーを作成します

*

* @戻り文字列

*/

プライベート関数 buildHeaders()

{

$request = "$this->メソッド $this->パス HTTP/1.1rn";

$request .= "ホスト: $this->hostrn";

$request .= "Accept-Encoding: gzip、deflatern";

$request .= "ユーザー エージェント: Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1rn";

$request .= "Content-Type: image/jpegrn";

$request .= "受け入れる: */*rn";

$request .= "キープアライブ: 300rn";

$request .= "リファラー: $this->refererrn";

$request .= "キャッシュ制御: max-age=315360000rn";

$request .= "接続: より近いnrn";

$request を返す;

}

/**

* 初期ヘッダーとファイルサイズ情報を削除します

*/

プライベート関数 extractBody(&$body)

{

// リンクのステータス

if(strpos($body, '200 OK') > 0) {

// ストリップヘッダー

$endpos = strpos($body, "rnrn");

$body = substr($body, $endpos + 4);

// nextline でファイルサイズを削除します

$body = substr($body, strpos($body, "rn") + 2);

}

}

/**

* http URL の追加

*

* @param $link

*/

プライベート関数parseLink($link)

{

$this->link = $link;

$this->components = parse_url($this->link);

$this->host = $this->components['host'];

$this->path = $this->components['path'];

if(空($this->リファラー)){

$this->referer = $this->components['scheme'] 。 '://' 。 $this->コンポーネント['ホスト'];

}elseif($this->リファラー == '1'){

$this->リファラー = '';

}

$this->ファイル名 = ベース名($this->パス);

// コンテンツタイプを抽出します

$ext = substr(strrchr($this->path, '.'), 1);

if ($ext == 'jpg' または $ext == 'jpeg') {

$this->contentType = 'image/pjpeg';

}

elseif ($ext == 'gif') {

$this->contentType = 'image/gif';

}

elseif ($ext == 'png') {

$this->contentType = 'image/x-png';

}

elseif ($ext == 'bmp') {

$this->contentType = 'image/bmp';

}

その他 {

$this->contentType = 'アプリケーション/オクテットストリーム';

}

}

//抓取网页内容

関数 CurlGet($url){

$url = str_replace('&','&',$url);

$curl =curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_HEADER, false);

curl_setopt($curl, CURLOPT_REFERER,$url);

curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (互換性; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");

curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');

curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);

$values =curl_exec($curl);

curl_close($curl);

$values を返す;

}

}

/**

* ルートドメイン名を取得します

*

* @作者寂しい

* @create 2011-3-11

* @バージョン 0.11

* @lastupdate 寂しい

* @packageSl

*/

クラスルートドメイン{

プライベート静的 $self;

プライベート $domain=null;

プライベート $host=null;

プライベート $state_domain;

プライベート $top_domain;

/**

* ドメイン名分析の例を取得します

* ここに説明を入力してください...

*/

パブリック静的関数 instace(){

if(!self::$self)

self::$self=新しいself();

self::$self を返す;

}

パブリック関数 __construct(){

$this->state_domain=array(

'al','dz','af','ar','ae','aw','om','az','eg','et','ie','ee',' ad','ao','ai','ag','at','au','mo','bb','pg','bs','pk','py','ps' 、'bh'、'pa'、'br'、'by'、'bm'、

'bg','mp','bj','be','is','pr','ba','pl','bo','bz','bw','bt',' bf','bi','bv','kp','gq','dk','de','tl','tp','tg','dm','do','ru' 、'ec'、'er'、'fr'、'fo'、'pf'、'gf'、'tf'、'v

a','ph','fj','fi','cv','fk','gm','cg','cd','co','cr','gg','gd ','gl','ge','cu','gp','gu','gy','kz','ht','kr','nl','an','hm', 「hn」、「ki」、「dj」、「kg」、「gn」、「gw」、「ca」

、'gh'、'ga'、'kh'、'cz'、'zw'、'cm'、'qa'、'ky'、'km'、'ci'、'kw'、'cc'、 'hr','ke','ck','lv','ls','la','lb','lt','lr','ly','li','re','lu ','rw','ro','mg','im','mv','mt','mw

'、'my'、'ml'、'mk'、'mh'、'mq'、'yt'、'mu'、'mr'、'us'、'um'、'as'、'vi' 、'mn'、'ms'、'bd'、'pe'、'fm'、'mm'、'md'、'ma'、'mc'、'mz'、'mx'、'nr'、'んぷ'、'に'、'ね'、'

ng','nu','no','nf','na','za','aq','gs','eu','pw','pn','pt','jp ','se','ch','sv','ws','yu','sl','sn','cy','sc','sa','cx','st', 「sh」、「kn」、「lc」、「sm」、「pm」、「vc」

','lk','sk','si','sj','sz','sd','sr','sb','so','tj','tw','th' 、'tz'、'to'、'tc'、'tt'、'tn'、'tv'、'tr'、'tm'、'tk'、'wf'、'vu'、'gt'、' ve','bn','ug','ua','uy','uz','es','eh','gr','hk

'、'sg'、'nc'、'nz'、'hu'、'sy'、'jm'、'am'、'ac'、'ye'、'iq'、'ir'、'il' ,'it','in','id','uk','vg','io','jo','vn','zm','je','td','gi',' cl'、'cf'、'cn'、'yr'

);

$this->top_domain=array('com','arpa','edu','gov','int','mil','net','org','biz','info', 'プロ'、'名前'、'ミュージアム'、'コープ'、'エアロ'、'xxx'、'idv'、'm

e'、'mobi');

$this->url=$_SERVER['HTTP_HOST'];

}

/**

* URLを設定します

* ここに説明を入力してください...

* @param string $url

*/

パブリック関数 setUrl($url=null){

$url=$url?$url:$this->url;

if(empty($url))$this を返す;

if(!preg_match("/^http:/is", $url))

$url="http://".$url;

$url=parse_url(strto lower($url));

$urlarr=explode(".", $url['host']);

$count=count($urlar);

if ($count

$this->ドメイン=$url['ホスト'];

}else if ($count>2){

$last=array_pop($urlar);

$last_1=array_pop($urlar);

if(in_array($last, $this->top_domain)){

$this->domain=$last_1.'.'.$last;

$this->host=implode('.', $urlarr);

}else if (in_array($last, $this->state_domain)){

$last_2=array_pop($urlar);

if(in_array($last_1, $this->top_domain)){

$this->domain=$last_2.'.'.$last_1.'.'.$last;

$this->host=implode('.', $urlarr);

}その他{

$this->host=implode('.', $urlarr).$last_2;

$this->domain=$last_1.'.'.$last;

}

}

}

$this を返す;

}

/**

* ドメイン名を取得する

* ここに説明を入力してください...

*/

パブリック関数 getDomain(){

$this->ドメインを返す;

}

/**

* ホストを取得します

* ここに説明を入力してください...

*/

パブリック関数 getHost(){

$this->ホストを返す;

}

}

$referer = array('xuehuwang.com','zangbala.cn','qianzhebaikou.net','sinaapp.com','163.com','sina.com.cn','weibo.com', 'abc.com');

// URL を取得します。指定された URL を確認する必要があるかもしれません

if (isset($_GET['url']) and $_GET['url'] != '') {

//获取来路域名

$site = (isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : '';

//適合は一枚の写真链接であるかどうか

if(preg_match('/(http|https|ftp|rtsp|mms):(//|\\){1}((w)+[.]){1,}([a-zA-Z] |[0-9]{1,3})(S*/)((S)+[.]{1}(gif|jpg|png|bmp))/i',$_GET['url']) ){

if(!empty($site)){

$tempu = parse_url($site);

$host = $tempu['ホスト'];

$root = 新しい RootDomain();

$root->setUrl($site);

if(in_array($root->getDomain(),$referer)){

$img_referer = (isset($_GET['referer']) && !empty($_GET['referer']))?トリム($_GET['リファラー']) : '';

新しいフリヴォラー($_GET['url'],$img_referer);

}

}その他{

$img_referer = (isset($_GET['referer']) && !empty($_GET['referer']))?トリム($_GET['リファラー']) : '';

新しいフリヴォラー($_GET['url'],$img_referer);

}

}

}

?>

ここに記載されている大家のphpプログラムの設計に役立つことを希望します。

http://www.bkjia.com/PHPjc/1025323.html

本当http://www.bkjia.com/PHPjc/1025323.html技術記事 php で実現されるネットワーク相図の盗難防止の完全な破壊方法 ここでは、php で実現されるネットワークの相似図の盗難防止の完全な破壊方法について説明します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。