質問編集履歴

1

セキュリティの関わる問題なので削除させていただきました。

2018/06/18 09:38

投稿

amaguri
amaguri

スコア227

test CHANGED
@@ -1 +1 @@
1
- cakephpで取得したIPが範囲内かつーブルデータ内フラグが1なのか0なのかの識別
1
+ セキュリ関わる問題なので削除させていただきました
test CHANGED
@@ -1,167 +1 @@
1
- 以前教えていただきまして取得したIPがDBに登録されたIPの範囲内かの判断はできるのすが
2
-
3
- IPの範囲内でなおかつfull_access_flgが1なのかの判断のプログラムの書き方がわかりません。
4
-
5
-
6
-
7
- やりたいこと
8
-
9
- 取得したIPがDBに登録された複数の許可IPの範囲内か?(テーブル内のデータ全件確認必須)
10
-
11
- 許可IPの取得及びfull_access_flgが1なのか?
12
-
13
- 許可IPが範囲でfull_access_flgが0なのか?
14
-
15
- の二つの切り分けがしたいのですがどうすれば効率よく切り分けができるかわかる方教えていただきたいです。
16
-
17
-
18
-
19
-
20
-
21
- テーブル
22
-
23
- ```php
24
-
25
- CREATE TABLE allow_ips
26
-
27
- id integer auto_increment,
28
-
29
- start_ip varchar(20),許可IP開始位置
30
-
31
- last_ip varchar(20),許可IP終了位置
32
-
33
- full_access_flg boolean not null default 0,
34
-
35
- ```
36
-
37
- 現在のコントローラー
38
-
39
- ```php
40
-
41
- // メインの処理
42
-
43
- public function index() {
44
-
45
- // 接続元IP情報
46
-
47
- $access_ip = CommonComponent::getAccessIp();
48
-
49
-
50
-
51
- // SQLの用意
52
-
53
- $sql = "SELECT start, last FROM ips AS AllowIps WHERE INET_ATON(?) between INET_ATON(start) and INET_ATON(end)";
54
-
55
-
56
-
57
- // SQLの実行と結果取得
58
-
59
- $ips = $this->AllowIps->query($sql, [$this->$access_ip]);
60
-
61
-
62
-
63
- // $ipsが空なら該当なしでエラーを返す
64
-
65
- if (empty($ips)) {
66
-
67
- $this->set("result" , array("result" => "error"));
68
-
69
- return;
70
-
71
- }
72
-
73
-
74
-
75
- }
76
-
77
-
78
-
79
- function getAccessIp() {
80
-
81
- if (empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
82
-
83
- return $_SERVER['REMOTE_ADDR'];
84
-
85
- }
86
-
87
-
88
-
89
- $ips = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
90
-
91
- return trim(end($ips));
92
-
93
- }
94
-
95
- ```
96
-
97
-
98
-
99
-
100
-
101
- これから書きたいコード
102
-
103
- // SQLの用意にfull_access_flgを追加して中身を確認する。
104
-
105
- ただこれだとIPが範囲内しかわからないと思うので
106
-
107
- full_access_flgが1なのかどうしたらいいかわかりません。
108
-
109
- ☆にところが重要はないかと考えていま
1
+ セキュリティの関わる問題なの削除させていただきした
110
-
111
- ```php
112
-
113
- // メインの処理
114
-
115
- public function index() {
116
-
117
- // 接続元IP情報
118
-
119
- $access_ip = CommonComponent::getAccessIp();
120
-
121
-
122
-
123
- // SQLの用意
124
-
125
- $sql = "SELECT start, last, full_access_flg FROM ips AS AllowIps WHERE INET_ATON(?) between INET_ATON(start) and INET_ATON(end)";
126
-
127
-
128
-
129
- ☆// SQLの実行と結果取得(ここで取るべき値も不明)
130
-
131
- $ips = $this->AllowIps->query($sql, [$this->$access_ip]);
132
-
133
-
134
-
135
- ☆// $ipsがIP範囲内かつfull_access_flgが1以外の場合
136
-
137
- if (empty($ips)) {
138
-
139
- //$ipsがIP範囲内かつfull_access_flgが1以外の場合の処理
140
-
141
- }
142
-
143
-
144
-
145
- }
146
-
147
-
148
-
149
- function getAccessIp() {
150
-
151
- if (empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
152
-
153
- return $_SERVER['REMOTE_ADDR'];
154
-
155
- }
156
-
157
-
158
-
159
- $ips = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
160
-
161
- return trim(end($ips));
162
-
163
- }
164
-
165
-
166
-
167
- ```