aws cloudfront (dengan waf) + api gateway: bagaimana cara mengakses melalui cloudfront?
<p>saya ingin meletakkan waf di depan api gateway, dan dengan info <a href="https://stackoverflow.com/questions/36421357/aws-api-gateway-with-aws-waf">(sedikit)</a> saya menemukan itu hanya mungkin dengan menempatkan distribusi cloudfront secara manual dengan waf diaktifkan, di depan apig. ini agak memalukan, terutama karena apig sekarang mendukung domain khusus secara native, tetapi seharusnya berfungsi.</p><p>sekarang untuk membuat solusinya aman daripada hanya tidak jelas, saya ingin menegakkan bahwa api hanya dapat diakses melalui distro cloudfront. apa pilihan terbaik untuk melakukan ini?</p><ul> <li>saya berharap dapat menggunakan 'origin access identities' yang mirip dengan s3, tetapi tidak melihat bagaimana melakukannya.</li> <li>jika saya bisa menetapkan pengguna iam (atau peran?) ke distro cloudfront, saya bisa menggunakan fitur apig iam, tetapi saya tidak melihat bagaimana ini bisa dilakukan.</li> <li>saya bisa memerlukan kunci api di apig, dan meneruskannya sebagai header kustom asal dari cloudfront. itu bisa berhasil, selama kita tidak ingin menggunakan kunci api untuk tujuan lain, jadi saya tidak sepenuhnya senang tentang itu.</li> <li>pengarang kustom dummy (!) dapat digunakan, dengan ekspresi validasi token benar-benar memeriksa rahasia yang diteruskan sebagai header kustom asal dari cloudfront. harus bekerja, ini lebih fleksibel, tetapi agak kotor ... atau tidak?</li> </ul><p>ada ide yang lebih baik? atau mungkin &quot;cara yang tepat&quot; untuk melakukannya ada tetapi saya mengabaikannya?</p>
<p>saya dari api gateway.</p><p>sayangnya, solusi terbaik yang kami miliki sampai sekarang adalah, untuk menyuntikkan header kustom origin di cloudfront dan memvalidasi itu dalam customizer (opsi 4 dalam pertanyaan anda).</p><p>kami sudah menyadari keterbatasan ini dan solusi yang tidak terlalu bagus. kami mencari untuk memberikan integrasi waf yang lebih baik di masa depan, tetapi kami tidak memiliki eta.</p>
<p>saya harus mengakui bahwa beralih dari eclipse ke phpstorm bukanlah yang termudah (karena keseluruhan ide sangat berbeda) hal tetapi itu sepadan dengan usaha.</p><p>anda tidak dapat memiliki beberapa proyek dibuka di jendela ide yang sama, dan juga klien git tidak sebagus yang ada di eclipse (sebenarnya saya merasa sangat miskin, bahwa saya hanya menggunakan git dari konsol sekarang) .tapi selain itu harus sangat mudah untuk menjalankan debugger atau tes unit.</p><p>ada beberapa <strong> tutorial video </strong> yang dapat membantu anda memulai.</p><p> <a href="http://www.jetbrains.com/phpstorm/documentation/phpstorm-video-tutorials.jsp">dokumentasi phpstorm - tutorial video</a> </p><p>selain itu, dokumentasi '<strong> ol yang baik </strong> dapat menjawab pertanyaan anda.</p><p> <a href="http://www.jetbrains.com/phpstorm/webhelp/phpstorm.html">bantuan web phpstorm</a> </p> <p>anda dapat menggunakan <a href="http://opendb.iamvegan.net/wiki/index.php?title=main\_page">opendb</a> . anda harus meng-host-nya sendiri, tetapi harus mudah dijalankan di komputer dasar apa pun yang dapat digunakan oleh apache + php. godaddy juga menawarkannya sebagai aplikasi yang dapat diinstal pada paket hosting mereka.</p> <p>itu awal dari analogi yang bagus. namun lambda juga memiliki keterbatasan dalam hal cpu dan ram yang tersedia, dan waktu menjalankan maksimum 15 menit per doa. jadi apa pun yang membutuhkan lebih banyak sumber daya, atau perlu berjalan lebih dari 15 menit, akan lebih cocok untuk fargate.</p><p>juga saya tidak yakin mengapa anda mengatakan sesuatu lebih cocok untuk fargate karena anda "selalu membutuhkan setidaknya satu contoh berjalan". lambda + api gateway sangat cocok untuk panggilan api, api gateway selalu siap untuk menerima panggilan api dan kemudian akan memanggil fungsi lambda untuk memprosesnya (jika responsnya belum di-cache).</p> <p>ini telah ditanyakan dalam stack overflow <a href="https://stackoverflow.com/questions/404040/how-do-you-like-your-primary-keys/404057#404057">di sini</a> dan <a href="https://stackoverflow.com/questions/829284/guid-vs-int-identity">di sini</a> .</p><p> <a href="http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids.html">posting jeff</a> menjelaskan banyak tentang pro dan kontra menggunakan guid.</p><blockquote> <h3>guid pro</h3> <ul> <li>unik di setiap tabel, setiap basis data, dan setiap server</li> <li>mengizinkan penggabungan catatan dengan mudah dari database yang berbeda</li> <li>mengizinkan distribusi basis data dengan mudah di beberapa server</li> <li>anda dapat membuat id di mana saja, alih-alih harus bolak-balik ke database</li> <li>sebagian besar skenario replikasi membutuhkan guid kolom pula</li> </ul> <h3>kontra guid</h3> <ul> <li>ini adalah kekalahan 4 kali lebih besar dari nilai indeks 4 byte tradisional; ini dapat memiliki implikasi kinerja dan penyimpanan yang serius jika anda tidak berhati-hati</li> <li>tidak praktis untuk debug (<code>where userid='{bae7df4-ddf-3rg-5ty3e3rf456as10}'</code>)</li> <li>guid yang dihasilkan sebagian harus berurutan untuk kinerja terbaik (misalnya, <code>newsequentialid()</code> pada sql server 2005+) dan untuk memungkinkan penggunaan indeks berkerumun</li> </ul> </blockquote><p>jika anda yakin tentang kinerja dan anda tidak berencana untuk mereplikasi atau menggabungkan catatan, maka gunakan <code>int</code>, dan atur secara otomatis peningkatan (<em> identitas benih di sql server </em>).</p> <p>kamu bisa menggunakan <code>git reflog</code> dalam klon dan checkout komit terakhir sebelum ini terjadi.</p><p>itu terjadi karena <code>.git/config</code> pada server web anda (dalam direktori repo kloning) menyertakan url jarak jauh dan orang-orang menambahkan nama pengguna: kata sandi di dalamnya yang seharusnya tidak pernah terjadi - orang harus menggunakan ssh, menggunakan kunci atau mengotentikasi pada setiap tarikan. jangan pernah menyimpan kredensial anda dalam file konfigurasi. gunakan pembantu kredensial.</p><p>sumber: <a href="https://www.reddit.com/r/git/comments/bk1eco/comment/emg3cxg">https://www.reddit.com/r/git/comments/bk1eco/comment/emg3cxg</a> </p><blockquote> <p>halo, ini aku, lelaki dengan cadanganmu ..</p> <p>saya akan mengungkapkan dosa-dosa anda</p> <p>ini adalah artikel dari tahun 2015, yang lebih rinci, <a href="https://en.internetwache.org/dont-publicly-expose-git-or-how-we-downloaded-your-websites-sourcecode-an-analysis-of-alexas-1m-28-07-2015/">https://en.internetwache.org/dont-publicly-expose-git-or-how-we-downloaded-your-websites-sourcecode-an-analysis -of-alexas-1m-28-07-2015 /</a> </p> </blockquote><p>artikel oleh internetwache tentang hal ini: <a href="https://en.internetwache.org/dont-publicly-expose-git-or-how-we-downloaded-your-websites-sourcecode-an-analysis-of-alexas-1m-28-07-2015/">https://en.internetwache.org/dont-publicly-expose-git-or-how-we-downloaded-your-websites-sourcecode-an-analysis-of-alexas- 1m-28-07-2015 /</a> </p><p>untuk mencegah hal ini memblokir akses ke direktori yang dimulai dengan titik, lihat <a href="https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess#l528-l551">https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess#l528-l551</a> </p><pre><code># - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # block access to all hidden files and directories with the exception of # the visible content from within the `/.well-known/` hidden directory. # # these types of files usually contain user preferences or the preserved # state of an utility, and can include rather private places like, for # example, the `.git` or `.svn` directories. # # the `/.well-known/` directory represents the standard (rfc 5785) path # prefix for "well-known locations" (e.g.: `/.well-known/manifest.json`, # `/.well-known/keybase.txt`), and therefore, access to its visible # content should not be blocked. # # https://www.mnot.net/blog/2010/04/07/well-known # https://tools.ietf.org/html/rfc5785 &lt;ifmodule mod\_rewrite.c&gt; rewriteengine on rewritecond %{request\_uri} "!(^|/)\.well-known/([^./]+./?)+$" [nc] rewritecond %{script\_filename} -d [or] rewritecond %{script\_filename} -f rewriterule "(^|/)\." - [f] &lt;/ifmodule&gt; </code></pre><p>atau pisahkan <code>.git</code> direktori dan data menggunakan <code>--separate-git-dir</code>.</p><blockquote> <p>--separate-git-dir = &lt;git dir&gt;<br> alih-alih menginisialisasi repositori sebagai direktori ke $ git\_dir atau ./.git/, buat file teks di sana yang berisi path ke repositori yang sebenarnya. file ini bertindak sebagai tautan simbolis filesystem-agnostic git ke repositori.</p> <p>jika ini adalah inisialisasi ulang, repositori akan dipindahkan ke jalur yang ditentukan.</p> </blockquote><p>tetapi yang terbaik adalah <code>rm -rf .git</code> setelah penyebaran - yang seharusnya hanya menyalin artefak build ke tujuan menggunakan <code>rsync</code>.</p><p> <a href="https://git-scm.com/docs/git-init#documentation/git-init.txtseparate-git-dirltgitdirgt">https://git-scm.com/docs/git-init#documentation/git-init.txtseparate-git-dirltgitdirgt</a> </p><blockquote> <p>--separate-git-dir = &lt;git dir&gt;<br> alih-alih menempatkan repositori yang dikloning di tempat yang seharusnya, letakkan repositori yang dikloning pada direktori yang ditentukan, kemudian buat tautan simbolik git filesystem-agnostik ke sana. hasilnya adalah repositori git dapat dipisahkan dari pohon kerja.</p> </blockquote><p> <a href="https://git-scm.com/docs/git-clone#documentation/git-clone.txtseparate-git-dirltgitdirgt">https://git-scm.com/docs/git-clone#documentation/git-clone.txtseparate-git-dirltgitdirgt</a> </p><p> <a href="https://stackoverflow.com/a/8603156/753676">https://stackoverflow.com/a/8603156/753676</a> </p><p>informasi tentang kunci penyebaran dan bantuan kredensial:</p><p> <a href="https://developer.github.com/v3/guides/managing-deploy-keys/">https://developer.github.com/v3/guides/managing-deploy-keys/</a> </p><blockquote> <p>menyebarkan kunci hanya-baca secara default, tetapi anda bisa memberinya akses tulis saat menambahkannya ke repositori.</p> </blockquote><p> <a href="https://gist.github.com/zhujunsan/a0becf82ade50ed06115">https://gist.github.com/zhujunsan/a0becf82ade50ed06115</a> </p><p> <a href="https://help.github.com/en/articles/caching-your-github-password-in-git">https://help.github.com/en/articles/caching-your-github-password-in-git</a> </p><p>gunakan <code>git push -u origin master -f &amp;&amp; git push --tags -f</code> dari klon lokal anda ke push semua referensi untuk master, tag dan seterusnya ke remote dan kemudian aktifkan 2fa di akun anda.</p><p>jika lebih banyak cabang yang terpengaruh gunakan <code>git push -u --all -f</code></p><p>aktifkan juga 2fa untuk mengurangi kemungkinan serangan semacam itu.</p><p><strong> harap jangan lupa untuk mengubah semua login/kata sandi yang dikompromikan dan mencabut setiap sesi yang tidak dikenal. </strong></p> <p>untuk membagikan yang terbaik kepada banyak pengguna yang seharusnya bisa menulis dalam <code>/var/www</code>, itu harus ditetapkan sebagai grup umum. misalnya grup default untuk konten web di ubuntu dan debian adalah <code>www-data</code>. pastikan semua pengguna yang membutuhkan akses tulis ke <code>/var/www</code> berada di grup ini.</p><pre><code>sudo usermod -a -g www-data &lt;some\_user&gt; </code></pre><p>kemudian atur izin yang benar di/var/www.</p><pre><code>sudo chgrp -r www-data /var/www sudo chmod -r g+w /var/www </code></pre><p>selain itu, anda harus membuat direktori dan semua direktori di bawahnya "set gid", sehingga semua <em> baru </em> file dan direktori yang dibuat dengan <code>/var/www</code> dimiliki oleh <code>www-data</code> kelompok.</p><pre><code>sudo find /var/www -type d -exec chmod 2775 {} \; </code></pre><p>temukan semua file di <code>/var/www</code> dan tambahkan izin baca dan tulis untuk pemilik dan grup:</p><pre><code>sudo find /var/www -type f -exec chmod ug+rw {} \; </code></pre><p>anda mungkin harus keluar dan masuk kembali untuk dapat membuat perubahan jika anda mengedit izin untuk akun anda sendiri.</p> <p>secara pribadi, saya akan menghindari beberapa protokol enkripsi sebagian besar waktu. ini menambah kompleksitas implementasi tambahan yang signifikan tanpa membuat data anda lebih aman di dunia nyata, kecuali jika protokol enkripsi yang anda gunakan pada akhirnya rusak atau menjadi layak secara komputasi di kemudian hari untuk dilanggar.</p><p>memang, saya akan tidak setuju dengan orang lain yang mengklaim bahwa dengan melakukan itu anda memiliki permukaan serangan yang lebih besar dan meningkatkan kerentanan anda. sementara permukaan serangan secara teknis meningkat (anda dapat menyerang blowfish; anda dapat menyerang aes), karena anda harus berhasil menyerang kedua keamanan anda tidak menurun. (anggap pesan anda dienkripsi berlipat ganda dengan cara bersarang (apa pun yang tidak masuk akal) dengan kunci/frasa sandi independen seperti <code>multiply\_encrypted\_file = blowfish(aes(file))</code>. jika penyerang mendapatkan <code>multiply\_encrypted\_file</code> itu adalah sama sekali tidak lebih lemah daripada mendapatkan <code>encrypted\_file = aes(file)</code> meskipun anda harus berhati-hati <a href="https://security.stackexchange.com/questions/18087/is-multiple-encryption-a-good-idea#comment29578\_18089">mengekspos diri anda terhadap serangan plaintext yang diketahui</a> yang dapat melemahkan keamanan jika anda menggunakan kunci/frasa sandi yang sama di semua tingkatan dan memiliki header/struktur file yang dapat ditebak setelah dekripsi tingkat pertama). bahkan jika mereka menemukan kelemahan yang dapat dieksploitasi dalam enkripsi <code>blowfish</code>, mereka masih hanya dapat membalikkannya dan kemudian menemukan file terenkripsi aes.</p><p>namun, saya menggunakan beberapa lapis enkripsi hampir setiap hari ketika ada alasan yang sah untuk itu dan memberikan keamanan ekstra. sebagai contoh, saya sering harus terhubung ke komputer kantor dari rumah saya, tetapi untuk keamanan komputer kantor berada di intranet pribadi, yang dipadamkan dari dunia luar.</p><p>untuk menghubungkan, saya pertama-tama membuat terowongan vpn melalui internet publik ke server vpn yang menghadap publik yang memverifikasi identitas saya yang bertindak sebagai gateway ke intranet. kemudian semua lalu lintas jaringan saya mengirim melalui internet antara rumah saya dan pekerjaan yang dienkripsi menggunakan protokol ipsec oleh vpn ke server vpn yang mendekripsi dan meneruskannya ke mesin lokal seolah-olah itu di intranet lokal. namun, saya kemudian mungkin ingin terhubung ke sesuatu di tempat kerja menggunakan <code>ssh</code> atau <code>https</code>. ini memberikan lapisan enkripsi untuk intranet lokal di tempat kerja, sehingga rekan kerja saya tidak bisa mengatakan menguping koneksi jaringan saya. namun, bagi seseorang di isp saya yang mengambil paket data yang mereka lihat telah dienkripsi berlipat ganda: <code>vpn\_encryption(ssh\_encryption(actual\_data\_to\_be\_transferred))</code>. sekali lagi, saya tidak menggunakan protokol ssh (di atas vpn) untuk membuat data saya lebih aman terhadap isp saya yang menguping; tetapi sama sekali tidak membuatnya lebih mudah bagi isp saya untuk menguping).</p><hr><p>edit: beberapa tetap berpendapat bahwa implementasi akan jauh lebih sulit daripada enkripsi standar, tetapi tidak harus. untuk menunjukkan, saya pertama-tama mengimplementasikan blowfish/aes di python menggunakan <a href="https://www.dlitz.net/software/pycrypto/">pycrypto</a> :</p><pre><code>from crypto.cipher import blowfish, aes from crypto import random from hashlib import sha256, sha512 def encrypt(plaintext, key, crypto\_class): block\_size = crypto\_class.block\_size iv = random.new().read(block\_size) cipher = crypto\_class.new(key, crypto\_class.mode\_cbc, iv) pad\_len = block\_size - (len(plaintext) % block\_size) padding = ''.join([chr(pad\_len)]*pad\_len) encrypted\_msg = iv + cipher.encrypt(plaintext + padding) return encrypted\_msg def decrypt(encrypted\_msg, key, crypto\_class): block\_size = crypto\_class.block\_size iv = encrypted\_msg[:block\_size] cipher = crypto\_class.new(key, crypto\_class.mode\_cbc, iv) padded\_msg = cipher.decrypt(encrypted\_msg[block\_size:]) pad\_len = ord(padded\_msg[-1]) msg = padded\_msg[:len(padded\_msg)-pad\_len] return msg </code></pre><p>yang digunakan dalam python seperti:</p><pre><code>&gt;&gt;&gt; plaintext = """confidential info: wall street does insider trading. also, israel has nuclear weapons.""" &gt;&gt;&gt; passphrase = 'dinner artist mere trace metal thirty warp better' &gt;&gt;&gt; key1 = sha256(passphrase).digest()[0:16] # use 16-bytes=128bits for aes128 &gt;&gt;&gt; key2 = sha512(passphrase).digest()[0:56] # 56 bytes max for blowfish. # ideally independent keys but based on same passphrase for simplicity &gt;&gt;&gt; aes\_encrypted\_msg = encrypt(plaintext, key1, aes) # '\r\xd0\x8e\x11\xbd\x9cn3\xd3\xa7a\xce\xd7\x15\xb4\xb2\xd7@\nbv\x95\xe0\xdb\xd0\xd2\xf2k\x9b\xcd\x80\xc0xr\xb7\x8d/\x16=\xfadv\xf0\xe2\xc8"x,\xa6\xf8\xed\x8b\xee#\xe1\xd1\xd4u4*0\x07\x11\x08\xc5\xe3\x98\r5\x018\xa5\xf1\x84\xb4\x90\xbc\x12\x80e\xbd\xe9\tn\xe1m\x92\xbb=\x06\r\xfe(\xe8\x12\xc7\x86=\n\x0f\x00\xa1r\xe6\x9c\xca\xaa\x15\xc1(\xaa\xe6' &gt;&gt;&gt; print decrypt(aes\_encrypted\_msg, key1, aes) confidential info: wall street does insider trading. also, israel has nuclear weapons. &gt;&gt;&gt; blowfish\_encrypted\_msg = encrypt(plaintext, key2, blowfish) # "a\xd2\xe5mf\xac\x81f\xe9q\xbd.\xd9swa\x8a)\xcc\x84s\x08\x00\x84\xc6y\xf5\xa1\x16\x88jauof\t4\xa2\xf2b\x89s\xaa\xa6\xb3\xda\xe2\xdd\xff\x0f\xc2\xe2\x1dw\xf6\x840\xe9\x08eje\xfa\x14\xb77\x99\x00a\xe0\xcd\xaf\xbe\x83\x08\xc0'\x81\x8b\x85\xf0\xdaxt\x94!o\xd0\x07\x0f#\xae$,\x91q" &gt;&gt;&gt; print decrypt(blowfish\_encrypted\_msg, key2, blowfish) confidential info: wall street does insider trading. also, israel has nuclear weapons. </code></pre><p>sekarang, anda dengan detail minimal anda dapat mengimplementasikan sesuatu seperti:</p><pre><code>def double\_encrypt\_using\_keys(plaintext, key1, key2): tmp\_encrypted\_msg = encrypt(plaintext, key1, aes) encrypted\_msg = encrypt(tmp\_encrypted\_msg, key2, blowfish) return encrypted\_msg def double\_decrypt\_using\_keys(encrypted\_msg, key1, key2): tmp\_encrypted\_msg = decrypt(encrypted\_msg, key2, blowfish) plaintext = decrypt(tmp\_encrypted\_msg, key1, aes) return plaintext def passphrase\_to\_keys(passphrase): return sha256(passphrase).digest()[0:16], sha512(passphrase).digest()[0:56] def double\_encrypt(plaintext, passphrase): return double\_encrypt\_using\_keys(plaintext, *passphrase\_to\_keys(passphrase)) def double\_decrypt(encrypted\_msg, passphrase): return double\_decrypt\_using\_keys(encrypted\_msg, *passphrase\_to\_keys(passphrase)) </code></pre><p>yang bisa digunakan seperti:</p><pre><code>&gt;&gt;&gt; double\_encrypted\_msg = double\_encrypt(plaintext, passphrase) # '\xe9\xcd\x89\xed\xb1f\xd4\xbel\xcb\x8b2!\x98\xf0\xe7\xcd.\xefe\x1b\x92&gt;\x82(\x8dg\xdaus\x8f!\xe2rgkj\xfb\xed\xb0\x10~n\xae\xe1\xce\x10\xf0\xa4k\x9f\xe6\xff\x8b\x7f\xdex]\x9a&lt;\x9d\xc7\xa9\xb8\x9a\xbbx\xa4\xcekoa\xbc=)\xcc\xe6r\xd7\xb7\xd0[\xc3\xfc\xbfou\x86\x18\xec5\xa9n\xed\xaa=\x9f\x06.\xbd\x0cmy\xcch\r\xf8\x8cr\xc0\xc5\xdeo\xef\xb0\xe01\x162\xaf\xf2\x1f\xd5\xb5"\x8a\xea\x96' &gt;&gt;&gt; print double\_decrypt(double\_encrypted\_msg, passphrase) confidential info: wall street does insider trading. also, israel has nuclear weapons. </code></pre><p>saya tidak melihat bagaimana implementasi multiply-terenkripsi memiliki lebih banyak permukaan serangan dan lebih lemah daripada implementasi tunggal. implementasi ke dunia luar masih dapat memasukkan kata sandi untuk mendekripsi file yang disimpan.</p> <p>ganti kata sandi. jika anda tidak dapat mengakses karena spammer mengubah kata sandi anda, hubungi dukungan facebook.</p><p>jika spammer adalah aplikasi, anda dapat mencabut haknya untuk mengakses akun anda dari halaman pengaturan akun anda.</p> <p>tidak ada yang namanya <em> "sub posting" </em> di wordpress sudah ada di dalamnya.</p><p>tapi bisa jadi anda membuat plugin yang memperkenalkan <em> "sub posting" </em> dengan gaya yang anda gambarkan.</p><p>secara teknis anda tidak berbicara tentang subpos tetapi tentang tata letak url. jadi di wordpress anda menambahkan titik akhir ("changelog") yang dapat anda tangani dengan beberapa plugin, misalnya beralih tampilan ke beberapa posting lain.</p><p>setelah ini tidak berfungsi dengan baik dengan titik akhir tapi saya pikir itu entah bagaimana diperbaiki sekarang. belum menggunakannya dengan keras, jadi jawaban saya hanya informatif sejauh ini.</p><h3>terkait:</h3><ul> <li> <a href="http://codex.wordpress.org/rewrite\_api">tulis ulang api</a> </li> <li> <a href="http://core.trac.wordpress.org/ticket/12779">tiket # 12779 - dukungan yang lebih baik untuk jenis pos khusus di wp\_rewrite</a> </li> <li> <a href="http://core.trac.wordpress.org/ticket/12605">tiket # 12605 - tidak dapat menambahkan endpoint ke custom post\_types</a> </li> <li> <a href="http://core.trac.wordpress.org/ticket/9476">tiket # 9476 - add\_rewrite\_endpoint () tidak berfungsi</a> </li> <li> <a href="http://core.trac.wordpress.org/ticket/2433">tiket # 2433 - berikan beberapa api untuk wp\_rewrite</a> </li> <li> <a href="http://core.trac.wordpress.org/ticket/12935">tiket # 12935 - kembangkan sistem routing url</a> </li> </ul> <p>ada 2 cara, yang biasanya saya gunakan</p><p>opsi 1: sebelum mem-boot ubuntu, di dalam virtualbox ubuntu vm pengaturan, tentukan folder share. kemudian setelah masuk ke ubuntu, buat direktori baru misalnya <code>/media/vboxshared</code> dan pasang drive itu menggunakan perintah <code>sudo mount -t vboxsf sharename /media/vboxshared</code>. masukkan kata sandi anda saat diminta kata sandi.</p><p>opsi 2: sebelum mem-boot ubuntu, tambahkan adapter jaringan baru dan pilih 'bridged adapter'. kemudian setelah masuk ke ubuntu, jalankan perintah <code>ifconfig -a | more</code> untuk mendapatkan alamat ip adaptor jaringan baru itu. di windows, gunakan winscp atau filezilla untuk mentransfer file ke ubuntu</p>