{"id":9801,"date":"2025-10-30T23:58:31","date_gmt":"2025-10-30T14:58:31","guid":{"rendered":"https:\/\/code-plus.jp\/gp\/?p=9801"},"modified":"2026-08-19T10:22:00","modified_gmt":"2026-08-19T01:22:00","slug":"url-parameter-9801","status":"publish","type":"post","link":"https:\/\/code-plus.jp\/gp\/url-parameter-9801\/","title":{"rendered":"URL\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u914d\u5217\u3092\u6e21\u30593\u3064\u306e\u65b9\u6cd5\u3068\u3001WAF\u3067\u771f\u3063\u767d\u306b\u306a\u308b\u554f\u984c\u306e\u89e3\u6c7a\u7b56"},"content":{"rendered":"<p>Web\u958b\u767a\u3067\u30d5\u30a3\u30eb\u30bf\u30fc\u6a5f\u80fd\u3092\u5b9f\u88c5\u3059\u308b\u969b\u3001URL\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u8907\u6570\u306e\u5024\u3092\u6e21\u3057\u305f\u3044\u30b1\u30fc\u30b9\u306f\u3088\u304f\u3042\u308a\u307e\u3059\u3002<\/p>\r\n<p>\u3057\u304b\u3057\u3001<b class=\"fw-600\">\u914d\u5217\u5f62\u5f0f\u306eURL\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5b9f\u88c5\u3057\u305f\u3089\u771f\u3063\u767d\u306a\u30a8\u30e9\u30fc\u753b\u9762\u306b\u306a\u3063\u305f<\/b>\u3068\u3044\u3046\u7d4c\u9a13\u306f\u3042\u308a\u307e\u305b\u3093\u304b\uff1f<\/p>\r\n\r\n<pre class=\"mt-1r\"><code class=\"language-\">\u4f8b\uff1a\u8907\u6570\u306e\u7269\u4ef6ID\u3067\u7d5e\u308a\u8fbc\u307f\u691c\u7d22\r\nhttps:\/\/example.com\/properties?id=muromi,meinohama&status=available\r\n<\/code><\/pre>\r\n\r\n<p class=\"mt-1r\">\u672c\u8a18\u4e8b\u3067\u306f\u3001URL\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u914d\u5217\u3092\u6e21\u30593\u3064\u306e\u65b9\u6cd5\u3068\u3001\u305d\u308c\u305e\u308c\u306e\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8\u3001\u305d\u3057\u3066<b class=\"fw-600\">WAF\uff08Web Application Firewall\uff09\u306b\u3088\u308b\u30d6\u30ed\u30c3\u30af\u554f\u984c<\/b>\u3068\u305d\u306e\u89e3\u6c7a\u7b56\u3092\u5b9f\u4f8b\u3092\u4ea4\u3048\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\r\n\r\n<!-- \u2605\u76ee\u6b21\u30ea\u30b9\u30c8 -->\r\n<ul class=\"tocList mt-1r\" data-toc-id=\"js-tocBWGD\" style=\"height:28rem\"><\/ul>\r\n<ins class=\"tocBtn is-fixed\" data-toc-id=\"js-tocBWGD\"><\/ins>\r\n\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n<h2 class=\"fz-xl\">URL\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u914d\u5217\u3092\u6e21\u30593\u3064\u306e\u65b9\u6cd5<\/h2>\r\n<h3 class=\"fz-ml\">1. \u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\uff08\u63a8\u5968\uff09<\/h3>\r\n<pre><code class=\"language-\">https:\/\/example.com\/search?id=1,2,3&amp;category=A,B\r\n<\/code><\/pre>\r\n<p><b class=\"fw-600\">\u30e1\u30ea\u30c3\u30c8:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u2705 URL\u304c\u77ed\u304f\u3001\u53ef\u8aad\u6027\u304c\u9ad8\u3044<\/li>\r\n  <li>\u2705 WAF\u306b\u30d6\u30ed\u30c3\u30af\u3055\u308c\u306b\u304f\u3044<\/li>\r\n  <li>\u2705 SEO\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\uff08URL\u304c\u77ed\u3044\uff09<\/li>\r\n  <li>\u2705 \u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684<\/li>\r\n<\/ul>\r\n<p><b class=\"fw-600\">\u30c7\u30e1\u30ea\u30c3\u30c8:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u274c \u30b5\u30fc\u30d0\u30fc\u5074\u3067 <code>explode(&#39;,&#39;)<\/code> \u306b\u3088\u308b\u5206\u5272\u51e6\u7406\u304c\u5fc5\u8981<\/li>\r\n  <li>\u274c \u5024\u306b\u30ab\u30f3\u30de\u304c\u542b\u307e\u308c\u308b\u5834\u5408\u306f\u30a8\u30b9\u30b1\u30fc\u30d7\u304c\u5fc5\u8981<\/li>\r\n<\/ul>\r\n<p><b class=\"fw-600\">PHP\u5b9f\u88c5\u4f8b:<\/b><\/p>\r\n<pre><code class=\"language-php\">\/\/ \u30ab\u30f3\u30de\u533a\u5207\u308a\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u914d\u5217\u306b\u5909\u63db\r\n$filter_ids = [];\r\nif (!empty($_GET[&#39;id&#39;])) {\r\n  $filter_ids = array_map(&#39;trim&#39;, explode(&#39;,&#39;, $_GET[&#39;id&#39;]));\r\n  $filter_ids = array_filter($filter_ids); \/\/ \u7a7a\u8981\u7d20\u3092\u9664\u53bb\r\n}\r\n\r\n\/\/ \u7d50\u679c: [&#39;1&#39;, &#39;2&#39;, &#39;3&#39;]\r\n<\/code><\/pre>\r\n<p><b class=\"fw-600\">JavaScript\u5b9f\u88c5\u4f8b:<\/b><\/p>\r\n<pre><code class=\"language-javascript\">\/\/ \u914d\u5217\u3092\u30ab\u30f3\u30de\u533a\u5207\u308a\u306eURL\u306b\u5909\u63db\r\nconst ids = [&#39;muromi&#39;, &#39;meinohama&#39;];\r\nconst params = new URLSearchParams();\r\nparams.set(&#39;id&#39;, ids.join(&#39;,&#39;)); \/\/ \u30ab\u30f3\u30de\u3067\u7d50\u5408\r\n\r\n\/\/ \u7d50\u679c: ?id=muromi,meinohama\r\nwindow.location.href = `?${params.toString()}`;\r\n<\/code><\/pre>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n<h3 class=\"fz-ml\">2. \u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\uff08RFC\u6e96\u62e0\uff09<\/h3>\r\n<pre><code class=\"language-\">https:\/\/example.com\/search?id=1&amp;id=2&amp;id=3\r\n<\/code><\/pre>\r\n<p><b class=\"fw-600\">\u30e1\u30ea\u30c3\u30c8:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u2705 RFC 3986\u306b\u6e96\u62e0\u3057\u305f\u6a19\u6e96\u7684\u306a\u65b9\u6cd5<\/li>\r\n  <li>\u2705 \u30b5\u30fc\u30d0\u30fc\u5074\u3067\u81ea\u52d5\u7684\u306b\u914d\u5217\u3068\u3057\u3066\u6271\u308f\u308c\u308b<\/li>\r\n  <li>\u2705 \u591a\u304f\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u30b5\u30dd\u30fc\u30c8<\/li>\r\n  <li>\u2705 WAF\u306b\u30d6\u30ed\u30c3\u30af\u3055\u308c\u306b\u304f\u3044<\/li>\r\n<\/ul>\r\n<p><b class=\"fw-600\">\u30c7\u30e1\u30ea\u30c3\u30c8:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u274c URL\u304c\u9577\u304f\u306a\u308b<\/li>\r\n  <li>\u274c \u53ef\u8aad\u6027\u304c\u4f4e\u3044<\/li>\r\n<\/ul>\r\n<p><b class=\"fw-600\">PHP\u5b9f\u88c5\u4f8b:<\/b><\/p>\r\n<pre><code class=\"language-php\">\/\/ PHP\u306f\u81ea\u52d5\u7684\u306b\u914d\u5217\u3068\u3057\u3066\u53d7\u3051\u53d6\u308b\r\n$filter_ids = $_GET[&#39;id&#39;] ?? [];\r\n\r\n\/\/ \u7d50\u679c: [&#39;1&#39;, &#39;2&#39;, &#39;3&#39;]\r\n<\/code><\/pre>\r\n<p><b class=\"fw-600\">JavaScript\u5b9f\u88c5\u4f8b:<\/b><\/p>\r\n<pre><code class=\"language-javascript\">const ids = [&#39;muromi&#39;, &#39;meinohama&#39;];\r\nconst params = new URLSearchParams();\r\nids.forEach(id =&gt; params.append(&#39;id&#39;, id)); \/\/ \u540c\u3058\u30ad\u30fc\u3092\u7e70\u308a\u8fd4\u3057\u8ffd\u52a0\r\n\r\n\/\/ \u7d50\u679c: ?id=muromi&amp;id=meinohama\r\nwindow.location.href = `?${params.toString()}`;\r\n<\/code><\/pre>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n<h3 class=\"fz-ml\">3. \u30d6\u30e9\u30b1\u30c3\u30c8\u5f62\u5f0f\uff08\u975e\u63a8\u5968\uff09<\/h3>\r\n<pre><code class=\"language-\">https:\/\/example.com\/search?id[]=1&amp;id[]=2&amp;id[]=3\r\n<\/code><\/pre>\r\n<p><b class=\"fw-600\">\u30e1\u30ea\u30c3\u30c8:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u2705 \u914d\u5217\u3067\u3042\u308b\u3053\u3068\u304c\u660e\u793a\u7684<\/li>\r\n  <li>\u2705 PHP\u306a\u3069\u4e00\u90e8\u306e\u8a00\u8a9e\u3067\u6a19\u6e96\u7684<\/li>\r\n<\/ul>\r\n<p><b class=\"fw-600\">\u30c7\u30e1\u30ea\u30c3\u30c8:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u274c <b class=\"fw-600\">WAF\u3067\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u9ad8\u3044<\/b><\/li>\r\n  <li>\u274c RFC 3986\u3067 <code>[<\/code> \u3068 <code>]<\/code> \u304c\u4e88\u7d04\u6587\u5b57\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b<\/li>\r\n  <li>\u274c \u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\uff08iOS\/Android\uff09\u3068\u306e\u9023\u643a\u3067\u554f\u984c\u304c\u767a\u751f\u3057\u3084\u3059\u3044<\/li>\r\n  <li>\u274c URL\u30a8\u30f3\u30b3\u30fc\u30c9\u5f8c\u306f <code>%5B%5D<\/code> \u3068\u306a\u308a\u53ef\u8aad\u6027\u304c\u4f4e\u3044<\/li>\r\n<\/ul>\r\n<p><b class=\"fw-600\">\u554f\u984c\u4f8b:<\/b><\/p>\r\n<pre><code class=\"language-\">https:\/\/example.com\/search?id%5B%5D=1&amp;id%5B%5D=2\r\n\u2192 \u771f\u3063\u767d\u306a\u30a8\u30e9\u30fc\u753b\u9762\uff08403 Forbidden\uff09\r\n<\/code><\/pre>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u26a0\ufe0f WAF\u3067\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\u554f\u984c<\/h2>\r\n<h3 class=\"fz-ml\">\u554f\u984c\u306e\u539f\u56e0<\/h3>\r\n<p>\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u30fc\uff08\u30ab\u30e9\u30d5\u30eb\u30dc\u30c3\u30af\u30b9\u3001\u30a8\u30c3\u30af\u30b9\u30b5\u30fc\u30d0\u30fc\u3001\u30ed\u30ea\u30dd\u30c3\u30d7\u306a\u3069\uff09\u306e\u591a\u304f\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067WAF\uff08Web Application Firewall\uff09\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\r\n<p>WAF\u306f\u3001<code>[]<\/code> \u3092\u542b\u3080URL\u30d1\u30e9\u30e1\u30fc\u30bf\u3092<b class=\"fw-600\">SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u3084XSS\u653b\u6483\u306e\u30d1\u30bf\u30fc\u30f3<\/b>\u3068\u3057\u3066\u8aa4\u691c\u77e5\u3057\u3001\u30d6\u30ed\u30c3\u30af\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\r\n<h3 class=\"fz-ml\">\u30d6\u30ed\u30c3\u30af\u3055\u308c\u305f\u6642\u306e\u75c7\u72b6<\/h3>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u771f\u3063\u767d\u306a\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u308b<\/li>\r\n  <li>403 Forbidden \u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u308b<\/li>\r\n  <li>\u30b5\u30fc\u30d0\u30fc\u30ed\u30b0\u306b\u300cModSecurity\u300d\u306a\u3069\u306e\u30a8\u30e9\u30fc\u304c\u8a18\u9332\u3055\u308c\u308b<\/li>\r\n<\/ul>\r\n<h3 class=\"fz-ml\">\u89e3\u6c7a\u65b9\u6cd5<\/h3>\r\n<h4 class=\"fz-md\">\u65b9\u6cd51: \u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\u307e\u305f\u306f\u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\u306b\u5909\u66f4\uff08\u63a8\u5968\uff09<\/h4>\r\n<pre><code class=\"language-javascript\">\/\/ \u274c \u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\r\n?id[]=muromi&amp;id[]=meinohama\r\n\r\n\/\/ \u2705 \u30d6\u30ed\u30c3\u30af\u3055\u308c\u306a\u3044\r\n?id=muromi,meinohama  \/\/ \u30ab\u30f3\u30de\u533a\u5207\u308a\r\n\r\n\/\/ \u2705 \u30d6\u30ed\u30c3\u30af\u3055\u308c\u306a\u3044\r\n?id=muromi&amp;id=meinohama  \/\/ \u7e70\u308a\u8fd4\u3057\r\n<\/code><\/pre>\r\n<h4 class=\"fz-md\">\u65b9\u6cd52: WAF\u306e\u30eb\u30fc\u30eb\u3092\u8abf\u6574\uff08\u975e\u63a8\u5968\uff09<\/h4>\r\n<p>\u30b5\u30fc\u30d0\u30fc\u306e\u7ba1\u7406\u753b\u9762\u3067WAF\u306e\u7279\u5b9a\u30eb\u30fc\u30eb\u3092\u7121\u52b9\u5316\u3067\u304d\u307e\u3059\u304c\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u304c\u9ad8\u307e\u308b\u305f\u3081\u63a8\u5968\u3057\u307e\u305b\u3093\u3002<\/p>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u5b9f\u52d9\u3067\u306e\u63a8\u5968\u30d1\u30bf\u30fc\u30f3<\/h2>\r\n<h3 class=\"fz-ml\">\u304a\u3059\u3059\u3081\u5ea6\u30e9\u30f3\u30ad\u30f3\u30b0<\/h3>\r\n<table class=\"table tbl-responsive\">\r\n  <thead>\r\n    <tr class=\"rung\">\r\n      <th>\u9806\u4f4d<\/th>\r\n      <td>\u65b9\u5f0f<\/td>\r\n      <td>\u7528\u9014<\/td>\r\n      <td>\u7406\u7531<\/td>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr class=\"rung\">\r\n      <th>\ud83e\udd47<\/th>\r\n      <td><b class=\"fw-600\">\u30ab\u30f3\u30de\u533a\u5207\u308a<\/b><\/td>\r\n      <td>\u4e00\u822c\u7684\u306aWeb\u30a2\u30d7\u30ea<\/td>\r\n      <td>URL\u304c\u77ed\u304f\u3001WAF\u5bfe\u7b56\u3082\u4e0d\u8981<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\ud83e\udd48<\/th>\r\n      <td><b class=\"fw-600\">\u7e70\u308a\u8fd4\u3057<\/b><\/td>\r\n      <td>API\u8a2d\u8a08\u3001\u6a19\u6e96\u6e96\u62e0<\/td>\r\n      <td>RFC\u6e96\u62e0\u3067\u591a\u304f\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u5bfe\u5fdc<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\ud83e\udd49<\/th>\r\n      <td>\u30d6\u30e9\u30b1\u30c3\u30c8<\/td>\r\n      <td>\uff08\u975e\u63a8\u5968\uff09<\/td>\r\n      <td>WAF\u554f\u984c\u3068\u30e2\u30d0\u30a4\u30eb\u5bfe\u5fdc\u306e\u554f\u984c<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n<h3 class=\"fz-ml\">\u9078\u629e\u57fa\u6e96<\/h3>\r\n<p><b class=\"fw-600\">\u30ab\u30f3\u30de\u533a\u5207\u308a\u3092\u9078\u3076\u3079\u304d\u30b1\u30fc\u30b9:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u30fc\u3067\u904b\u7528\u3059\u308b<\/li>\r\n  <li>URL\u306e\u53ef\u8aad\u6027\u30fbSEO\u3092\u91cd\u8996\u3059\u308b<\/li>\r\n  <li>\u793e\u5185\u30b7\u30b9\u30c6\u30e0\u306a\u3069\u9650\u5b9a\u7684\u306a\u7528\u9014<\/li>\r\n<\/ul>\r\n<p><b class=\"fw-600\">\u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\u3092\u9078\u3076\u3079\u304d\u30b1\u30fc\u30b9:<\/b><\/p>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u5916\u90e8API\u3068\u3057\u3066\u516c\u958b\u3059\u308b<\/li>\r\n  <li>RFC\u6e96\u62e0\u3092\u91cd\u8996\u3059\u308b<\/li>\r\n  <li>\u591a\u304f\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u4e92\u63db\u6027\u304c\u5fc5\u8981<\/li>\r\n<\/ul>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u5b8c\u5168\u306a\u5b9f\u88c5\u4f8b\uff08PHP\u3068JavaScript\uff09<\/h2>\r\n<h3 class=\"fz-ml\">PHP\u5074\u306e\u5b9f\u88c5<\/h3>\r\n<pre><code class=\"language-php\">&lt;?php\r\n\/**\r\n * \u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\u306eURL\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u51e6\u7406\r\n * \u4f8b: ?id=muromi,meinohama&amp;status=sent,completed\r\n *\/\r\n\r\n\/\/ \u7269\u4ef6ID\uff08\u30ab\u30f3\u30de\u533a\u5207\u308a \u2192 \u914d\u5217\u306b\u5909\u63db\uff09\r\n$filter_ids = [];\r\nif (!empty($_GET[&#39;id&#39;])) {\r\n  $filter_ids = array_map(&#39;trim&#39;, explode(&#39;,&#39;, $_GET[&#39;id&#39;]));\r\n  $filter_ids = array_filter($filter_ids); \/\/ \u7a7a\u8981\u7d20\u3092\u9664\u53bb\r\n}\r\n\r\n\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9\uff08\u30ab\u30f3\u30de\u533a\u5207\u308a \u2192 \u914d\u5217\u306b\u5909\u63db\uff09\r\n$filter_statuses = [];\r\nif (!empty($_GET[&#39;status&#39;])) {\r\n  $filter_statuses = array_map(&#39;trim&#39;, explode(&#39;,&#39;, $_GET[&#39;status&#39;]));\r\n  $filter_statuses = array_filter($filter_statuses);\r\n}\r\n\r\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u3067\u306e\u4f7f\u7528\u4f8b\r\nif (!empty($filter_ids)) {\r\n  $placeholders = implode(&#39;,&#39;, array_fill(0, count($filter_ids), &#39;?&#39;));\r\n  $sql = &quot;SELECT * FROM properties WHERE id IN ($placeholders)&quot;;\r\n  \/\/ \u4ee5\u4e0b\u3001\u30d7\u30ea\u30da\u30a2\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3067\u5b9f\u884c\r\n}\r\n?&gt;\r\n<\/code><\/pre>\r\n<h3 class=\"fz-ml\">JavaScript\u5074\u306e\u5b9f\u88c5<\/h3>\r\n<pre><code class=\"language-javascript\">\/**\r\n * \u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u6642\u306b\u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\u306eURL\u3092\u751f\u6210\r\n *\/\r\ndocument.querySelector(&#39;form&#39;).addEventListener(&#39;submit&#39;, function(e) {\r\n  e.preventDefault();\r\n  \r\n  const form = this;\r\n  const params = new URLSearchParams();\r\n  \r\n  \/\/ \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3067\u9078\u629e\u3055\u308c\u305f\u7269\u4ef6ID\r\n  const selectedIds = Array.from(form.querySelectorAll(&#39;input[name=&quot;id[]&quot;]:checked&#39;))\r\n    .map(input =&gt; input.value);\r\n  \r\n  if (selectedIds.length &gt; 0) {\r\n    params.set(&#39;id&#39;, selectedIds.join(&#39;,&#39;)); \/\/ \u30ab\u30f3\u30de\u3067\u7d50\u5408\r\n  }\r\n  \r\n  \/\/ \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3067\u9078\u629e\u3055\u308c\u305f\u30b9\u30c6\u30fc\u30bf\u30b9\r\n  const selectedStatuses = Array.from(form.querySelectorAll(&#39;input[name=&quot;status[]&quot;]:checked&#39;))\r\n    .map(input =&gt; input.value);\r\n  \r\n  if (selectedStatuses.length &gt; 0) {\r\n    params.set(&#39;status&#39;, selectedStatuses.join(&#39;,&#39;));\r\n  }\r\n  \r\n  \/\/ \u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\u306eURL\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\r\n  const url = window.location.pathname + &#39;?&#39; + params.toString();\r\n  window.location.href = url;\r\n  \r\n  \/\/ \u7d50\u679c: ?id=muromi,meinohama&amp;status=sent,completed\r\n});\r\n<\/code><\/pre>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u5404\u8a00\u8a9e\u30fb\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306e\u5bfe\u5fdc\u72b6\u6cc1<\/h2>\r\n<h3 class=\"fz-ml\">PHP<\/h3>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li>\u2705 \u30ab\u30f3\u30de\u533a\u5207\u308a: <code>explode()<\/code> \u3067\u5bfe\u5fdc\u53ef\u80fd<\/li>\r\n  <li>\u2705 \u7e70\u308a\u8fd4\u3057: \u81ea\u52d5\u7684\u306b\u914d\u5217\u3068\u3057\u3066\u53d7\u3051\u53d6\u308b<\/li>\r\n  <li>\u26a0\ufe0f \u30d6\u30e9\u30b1\u30c3\u30c8: \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5bfe\u5fdc\u3060\u304cWAF\u554f\u984c<\/li>\r\n<\/ul>\r\n<h3 class=\"fz-ml\">Node.js \/ Express<\/h3>\r\n<pre><code class=\"language-javascript\">\/\/ \u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\r\napp.get(&#39;\/search&#39;, (req, res) =&gt; {\r\n  const ids = req.query.id; \/\/ \u914d\u5217\u307e\u305f\u306f\u30b9\u30ab\u30e9\u30fc\u5024\r\n  const idsArray = Array.isArray(ids) ? ids : [ids];\r\n});\r\n<\/code><\/pre>\r\n<h3 class=\"fz-ml\">Ruby on Rails<\/h3>\r\n<pre><code class=\"language-ruby\"># \u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\uff08\u81ea\u52d5\u7684\u306b\u914d\u5217\u5316\uff09\r\nparams[:id] # =&gt; [&quot;muromi&quot;, &quot;meinohama&quot;]\r\n<\/code><\/pre>\r\n<h3 class=\"fz-ml\">Python \/ Flask<\/h3>\r\n<pre><code class=\"language-python\"># \u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\r\nfrom flask import request\r\n\r\n@app.route(&#39;\/search&#39;)\r\ndef search():\r\n    ids = request.args.getlist(&#39;id&#39;)  # [&#39;muromi&#39;, &#39;meinohama&#39;]\r\n<\/code><\/pre>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u3068\u306e\u9023\u643a<\/h2>\r\n<h3 class=\"fz-ml\">iOS\uff08Swift \/ Alamofire\uff09<\/h3>\r\n<pre><code class=\"language-swift\">\/\/ \u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\u3092\u63a8\u5968\r\nlet parameters: [String: String] = [\r\n    &quot;id&quot;: &quot;muromi,meinohama&quot;,\r\n    &quot;status&quot;: &quot;sent&quot;\r\n]\r\n\r\nAF.request(url, method: .get, parameters: parameters)\r\n<\/code><\/pre>\r\n<p><b class=\"fw-600\">\u6ce8\u610f:<\/b> Alamofire\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3067\u306f\u914d\u5217\u306b\u30d6\u30e9\u30b1\u30c3\u30c8\u304c\u4ed8\u304f\u305f\u3081\u3001\u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002<\/p>\r\n<h3 class=\"fz-ml\">Android\uff08Kotlin \/ Retrofit\uff09<\/h3>\r\n<pre><code class=\"language-kotlin\">\/\/ \u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\u304c\u4e00\u822c\u7684\r\n@GET(&quot;search&quot;)\r\nsuspend fun search(\r\n    @Query(&quot;id&quot;) ids: List&lt;String&gt;\r\n): Response&lt;SearchResult&gt;\r\n\r\n\/\/ \u547c\u3073\u51fa\u3057\r\napi.search(listOf(&quot;muromi&quot;, &quot;meinohama&quot;))\r\n<\/code><\/pre>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff<\/h2>\r\n<h3 class=\"fz-ml\">\u30b5\u30fc\u30d0\u30fc\u5074\u306e\u51e6\u7406\u8ca0\u8377<\/h3>\r\n<table class=\"table tbl-responsive\">\r\n  <thead>\r\n    <tr class=\"rung\">\r\n      <th>\u65b9\u5f0f<\/th>\r\n      <td>\u51e6\u7406\u5185\u5bb9<\/td>\r\n      <td>\u8ca0\u8377<\/td>\r\n    <\/tr>\r\n  <\/thead>\r\n  <tbody>\r\n    <tr class=\"rung\">\r\n      <th>\u30ab\u30f3\u30de\u533a\u5207\u308a<\/th>\r\n      <td><code>explode()<\/code> \u306b\u3088\u308b\u6587\u5b57\u5217\u5206\u5272<\/td>\r\n      <td>\u4f4e<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\u7e70\u308a\u8fd4\u3057<\/th>\r\n      <td>PHP\u304c\u81ea\u52d5\u51e6\u7406<\/td>\r\n      <td>\u6700\u4f4e<\/td>\r\n    <\/tr>\r\n    <tr class=\"rung\">\r\n      <th>\u30d6\u30e9\u30b1\u30c3\u30c8<\/th>\r\n      <td>PHP\u304c\u81ea\u52d5\u51e6\u7406<\/td>\r\n      <td>\u6700\u4f4e<\/td>\r\n    <\/tr>\r\n  <\/tbody>\r\n<\/table>\r\n<p><b class=\"fw-600\">\u7d50\u8ad6:<\/b> \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u9762\u3067\u306f\u5927\u5dee\u306a\u3057\u3002\u53ef\u8aad\u6027\u3068WAF\u5bfe\u7b56\u3092\u512a\u5148\u3059\u3079\u304d\u3002<\/p>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u6ce8\u610f\u70b9<\/h2>\r\n<h3 class=\"fz-ml\">1. SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/h3>\r\n<pre><code class=\"language-php\">\/\/ \u274c \u5371\u967a: \u76f4\u63a5SQL\u306b\u7d50\u5408\r\n$sql = &quot;SELECT * FROM properties WHERE id IN (&quot; . implode(&#39;,&#39;, $filter_ids) . &quot;)&quot;;\r\n\r\n\/\/ \u2705 \u5b89\u5168: \u30d7\u30ea\u30da\u30a2\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\r\n$placeholders = implode(&#39;,&#39;, array_fill(0, count($filter_ids), &#39;?&#39;));\r\n$stmt = $pdo-&gt;prepare(&quot;SELECT * FROM properties WHERE id IN ($placeholders)&quot;);\r\n$stmt-&gt;execute($filter_ids);\r\n<\/code><\/pre>\r\n<h3 class=\"fz-ml\">2. \u5165\u529b\u5024\u306e\u691c\u8a3c<\/h3>\r\n<pre><code class=\"language-php\">\/\/ \u6570\u5024\u306e\u307f\u3092\u8a31\u53ef\r\n$filter_ids = array_filter($filter_ids, function($id) {\r\n  return ctype_digit($id);\r\n});\r\n\r\n\/\/ \u8a31\u53ef\u30ea\u30b9\u30c8\u3067\u691c\u8a3c\r\n$allowed_statuses = [&#39;sent&#39;, &#39;pending&#39;, &#39;completed&#39;];\r\n$filter_statuses = array_filter($filter_statuses, function($status) use ($allowed_statuses) {\r\n  return in_array($status, $allowed_statuses);\r\n});\r\n<\/code><\/pre>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u307e\u3068\u3081<\/h2>\r\n<ol style=\"list-style-type:decimal;\">\r\n  <li>\r\n    <p><b class=\"fw-600\">\u30ab\u30f3\u30de\u533a\u5207\u308a\u5f62\u5f0f\u304c\u5b9f\u7528\u7684<\/b><\/p>\r\n    <ul style=\"list-style-type:bullet;\">\r\n      <li>URL\u304c\u77ed\u304f\u3001WAF\u554f\u984c\u3082\u306a\u3044<\/li>\r\n      <li>\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u30fc\u3067\u3082\u5b89\u5168\u306b\u52d5\u4f5c<\/li>\r\n    <\/ul>\r\n  <\/li>\r\n  <li>\r\n    <p><b class=\"fw-600\">\u7e70\u308a\u8fd4\u3057\u5f62\u5f0f\u306fAPI\u5411\u3051<\/b><\/p>\r\n    <ul style=\"list-style-type:bullet;\">\r\n      <li>RFC\u6e96\u62e0\u3067\u6a19\u6e96\u7684<\/li>\r\n      <li>\u5916\u90e8\u516c\u958bAPI\u306a\u3089\u63a8\u5968<\/li>\r\n    <\/ul>\r\n  <\/li>\r\n  <li>\r\n    <p><b class=\"fw-600\">\u30d6\u30e9\u30b1\u30c3\u30c8\u5f62\u5f0f\u306f\u907f\u3051\u308b\u3079\u304d<\/b><\/p>\r\n    <ul style=\"list-style-type:bullet;\">\r\n      <li>WAF\u3067\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\u30ea\u30b9\u30af<\/li>\r\n      <li>\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u3068\u306e\u9023\u643a\u3067\u554f\u984c<\/li>\r\n    <\/ul>\r\n  <\/li>\r\n<\/ol>\r\n<h3 class=\"fz-ml\">\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li><input disabled=\"\" type=\"checkbox\"> \u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u30fc\u3067WAF\u304c\u6709\u52b9\u304b\u78ba\u8a8d<\/li>\r\n  <li><input disabled=\"\" type=\"checkbox\"> URL\u306e\u53ef\u8aad\u6027\u3092\u8003\u616e<\/li>\r\n  <li><input disabled=\"\" type=\"checkbox\"> \u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u3068\u306e\u9023\u643a\u304c\u5fc5\u8981\u304b\u78ba\u8a8d<\/li>\r\n  <li><input disabled=\"\" type=\"checkbox\"> \u30b5\u30fc\u30d0\u30fc\u5074\u3067\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5<\/li>\r\n  <li><input disabled=\"\" type=\"checkbox\"> SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u306e\u5b9f\u65bd<\/li>\r\n<\/ul>\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n\r\n<h2 class=\"fz-xl\">\u53c2\u8003\u30ea\u30f3\u30af<\/h2>\r\n<ul style=\"list-style-type:bullet;\">\r\n  <li><cite><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc3986\" class=\"link\" target=\"_blank\">RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax<\/a><\/cite><\/li>\r\n  <li><cite><a href=\"https:\/\/www.php.net\/manual\/ja\/reserved.variables.get.php\" class=\"link\" target=\"_blank\">PHP: $_GET - Manual<\/a><\/cite><\/li>\r\n  <li><cite><a href=\"https:\/\/developer.mozilla.org\/ja\/docs\/Web\/API\/URLSearchParams\" class=\"link\" target=\"_blank\">URLSearchParams - Web APIs | MDN<\/a><\/cite><\/li>\r\n<\/ul>\r\n\r\n<hr class=\"separator mx-auto mt-3r\" \/>\r\n\r\n<h2 class=\"fz-xl\">\u95a2\u9023\u8a18\u4e8b<\/h2>\r\n<a href=\"https:\/\/code-plus.jp\/gp\/php-csrf-token-9807\/\" class=\"linkbox my-1.5r\">\r\n  <h4 class=\"linkbox-title fz-md\">PHP\u3067CSRF\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\uff5cCSRF\u30c8\u30fc\u30af\u30f3\u306e\u751f\u6210\u30fb\u691c\u8a3c\u30fb\u30a8\u30e9\u30fc\u30fb\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u307e\u3067\u5fb9\u5e95\u89e3\u8aac<\/h4>\r\n  <picture class=\"linkbox-thumbnail\">\r\n    <img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/code-plus.jp\/gp\/wp-content\/uploads\/46f14698ec19e7051ea8d4dfe25e19f2.jpg?ver=20260819102200\" alt=\"PHP\u3067CSRF\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\uff5cCSRF\u30c8\u30fc\u30af\u30f3\u306e\u751f\u6210\u30fb\u691c\u8a3c\u30fb\u30a8\u30e9\u30fc\u30fb\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u307e\u3067\u5fb9\u5e95\u89e3\u8aac\" loading=\"lazy\" \/>\r\n  <\/picture>\r\n  <span class=\"linkbox-excerpt\">PHP\u3067\u306eCSRF\uff08\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30ea\u30af\u30a8\u30b9\u30c8\u30d5\u30a9\u30fc\u30b8\u30a7\u30ea\uff09\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u3092\u5fb9\u5e95\u89e3\u8aac\u3002\u30c8\u30fc\u30af\u30f3\u306e\u751f\u6210\u30fb\u691c\u8a3c\u30fb\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u304b\u3089\u3001\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u306e\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u307e\u3067\u3001\u5b9f\u4f8b\u4ed8\u304d\u3067\u5206\u304b\u308a\u3084\u3059\u304f\u8aac\u660e\u3057\u307e\u3059\u3002\r\n    &emsp;<u class=\"linkbox-more\">\u7d9a\u304d\u3092\u8aad\u3080<\/u>\r\n  <\/span>\r\n<\/a>","protected":false},"excerpt":{"rendered":"URL\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u8907\u6570\u306e\u5024\u3092\u6e21\u3059\u969b\u306e3\u3064\u306e\u5b9f\u88c5\u65b9\u6cd5\uff08\u30ab\u30f3\u30de\u533a\u5207\u308a\u30fb\u914d\u5217\u5f62\u5f0f\u30fb\u30d6\u30e9\u30b1\u30c3\u30c8\u4ed8\u304d\uff09\u3092\u6bd4\u8f03\u3002\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u30fc\u3067URL\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\u554f\u984c\u3092\u5b9f\u4f8b\u3067\u89e3\u8aac\u3002WAF\u3067\u30d6\u30ed\u30c3\u30af\u3055\u308c\u308b\u539f\u56e0\u3068\u89e3\u6c7a\u7b56\u3001PHP\u3067\u306e\u5b9f\u88c5\u4f8b\u7b49\u3001\u5b9f\u52d9\u3067\u4f7f\u3048\u308b\u77e5\u8b58\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002","protected":false},"author":1,"featured_media":9806,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","footnotes":"","vk-ltc-link":"","vk-ltc-target":"0"},"categories":[957],"tags":[414,413,415,416,417,270,159,113,111],"group":[],"pg":[],"class_list":["post-9801","post","type-post","status-publish","format-standard","has-post-thumbnail","category-backend","tag-414","tag-413","tag-waf","tag-api","tag-417","tag-url","tag-159","tag-javascript","tag-php"],"acf":[],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/posts\/9801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/comments?post=9801"}],"version-history":[{"count":0,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/posts\/9801\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media\/9806"}],"wp:attachment":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media?parent=9801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/categories?post=9801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/tags?post=9801"},{"taxonomy":"group","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/group?post=9801"},{"taxonomy":"pg","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pg?post=9801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}