Adakah mungkin untuk menyimpan kod klasik asp ke dalam pangkalan data MySQL dan meminta ia melaksanakan kod apabila ditarik? Sebagai contoh, simpan nama pembolehubah ke dalam rentetan dan minta ia melaksanakan ASP sebelum memaparkannya? Saya mengesyaki ini tidak mungkin kerana permintaan MySQL dijalankan selepas halaman dimuatkan, jadi data pemulangan tidak dilaksanakan, hanya nama pembolehubah. Perkara lain ialah ia mungkin pengekodan HTML, ia mungkin dikodkan selepas menghantarnya ke pelayan MySQL, tetapi setakat ini ia hanya membaca nama pembolehubah. Sebarang idea mengenai perkara ini, adakah ini mustahil atau saya menyahkodkan entah bagaimana:
Saya telah mencuba pengekodannya seperti ini, menggunakan fungsi penggantian Chr yang berfungsi di tempat lain, tetapi fungsi itu digunakan seperti ini:
NEWSTRING = Server.HtmlEncode(OLDSTRING)
Tidak kira sama ada anda cuba mengekod atau tidak, hasilnya hanya akan menunjukkan kod ASP Classic, seperti ini:
MESSAGE TO USER <%=Session("var_FOO")%>
Walaupun Encode nampaknya tidak mengubah rentetan yang dipaparkan pada skrin, hasil log menunjukkan percubaan pengekodan yang, bukannya memasukkan data, menukar jenis aksara seperti ini:
"var_Foo"
Saya mungkin menyalak pokok yang salah dengan pengekodan, tetapi jika anda mempunyai tukul, anda boleh cuba menumbuk beberapa skru sehingga ia masuk.
Ciri ini pada masa ini sukar bagi saya kerana cara yang lebih mudah ialah menyimpan rentetan dalam pangkalan data seperti yang saya lakukan dan kemudian menambah pembolehubah pada rentetan selepas menariknya keluar daripada meletakkannya dalam Masukkan pangkalan data. Sudah tentu, ini bermakna pengguna tidak boleh mengawal mesej ralat melalui pembolehubah yang dikaitkan dengannya, tetapi saya rasa saya boleh hidup dengannya.
Soalan serupa meminta untuk melakukan ini sebagai fungsi, jika anda membaca sisa siaran anda akan melihat terdapat perbezaan.
Ya, boleh. ASP Klasik menyediakan kaedah Eval, Execute, dan ExecuteGlobal yang mana anda boleh menghantar rentetan teks yang mengandungi kod sumber.
Melakukan ini pada tapak web yang dihadapi orang ramai adalah berbahaya; jika cecacing rangkaian tahu cara menulis kod sewenang-wenangnya ke jadual pangkalan data anda, dia boleh mengganggu, merosakkan atau merampas aplikasi anda. Anda tidak paranoid: orang asing yang proaktif sebenarnya merancang menentang anda dan mencari tapak yang beroperasi dengan cara ini. Berhati-hati.
Eval(codeText) Menjalankan ungkapan dan mengembalikan hasilnya. ExecuteGlobal(codeText) Menjalankannya seolah-olah ia berada dalam konteks peringkat teratas. Laksanakan(codeText) Menjalankannya dalam konteks (subrutin atau fungsi) di mana ia dipanggil.