registerglobals.inc.php 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256
  1. <?php
  2. // -------------------------------------------------------------------------------
  3. // | net2ftp: a web based FTP client |
  4. // | Copyright (c) 2003-2013 by David Gartner |
  5. // | |
  6. // | This program is free software; you can redistribute it and/or |
  7. // | modify it under the terms of the GNU General Public License |
  8. // | as published by the Free Software Foundation; either version 2 |
  9. // | of the License, or (at your option) any later version. |
  10. // | |
  11. // -------------------------------------------------------------------------------
  12. // Make sure this file is included by net2ftp, not accessed directly
  13. defined("NET2FTP") or die("Direct access to this location is not allowed.");
  14. // -------------------------------------------------------------------------
  15. // Overview of the code
  16. // 1 Replace \' by ' (remove_magic_quotes)
  17. // 2 Start the session
  18. // 3 Register $_SERVER variables
  19. // 4.1 Register main variables - POST method
  20. // 4.2 Register main variables - GET method
  21. // 5.1 Delete the session data when logging out
  22. // 5.2 Redirect to login_small if session has expired
  23. // 6 Register $_COOKIE variables
  24. // 7 Determine the browser agent, version and platform
  25. // -------------------------------------------------------------------------
  26. // -------------------------------------------------------------------------
  27. // 1 When a variable is submitted, quotes ' are replaced by backslash-quotes \'
  28. // This function removes the extra backslash that is added
  29. // -------------------------------------------------------------------------
  30. if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() == 1) {
  31. remove_magic_quotes($_POST);
  32. remove_magic_quotes($_GET);
  33. remove_magic_quotes($_COOKIE);
  34. }
  35. // Do not add remove_magic_quotes for $GLOBALS because this would call the same
  36. // function a second time, replacing \' by ' and \" by "
  37. // -------------------------------------------------------------------------
  38. // 2 Start the session
  39. // -------------------------------------------------------------------------
  40. if (function_exists("session_name") == false) {
  41. $net2ftp_result["success"] = false;
  42. $net2ftp_result["error_message"] = "Sessions are not supported on this server.";
  43. $net2ftp_result["debug_backtrace"] = debug_backtrace();
  44. logError();
  45. return false;
  46. }
  47. /*
  48. // PMA - Cookies are safer
  49. ini_set("session.use_cookies", true);
  50. // PMA - but not all user allow cookies
  51. ini_set("session.use_only_cookies", false);
  52. ini_set("session.use_trans_sid", true);
  53. // PMA - Delete session/cookies when browser is closed
  54. ini_set("session.cookie_lifetime", 0);
  55. // PMA - Warn but dont work with bug
  56. ini_set("session.bug_compat_42", false);
  57. ini_set("session.bug_compat_warn", true);
  58. // PMA - Use more secure session ids (with PHP 5)
  59. if (version_compare(PHP_VERSION, "5.0.0", "ge") && substr(PHP_OS, 0, 3) != "WIN") {
  60. ini_set("session.hash_function", 1);
  61. ini_set("session.hash_bits_per_character", 6);
  62. }
  63. // PMA - [2006-01-25] Nicola Asuni - www.tecnick.com: maybe the PHP directive
  64. // session.save_handler is set to another value like "user"
  65. ini_set("session.save_handler", "files");
  66. */
  67. // Start the session
  68. // PMA - On some servers (for example, sourceforge.net), we get a permission error on the session data directory, so prefix with @
  69. if(file_exists("includes/helpers.php")){
  70. require_once("includes/helpers.php");
  71. }else{
  72. if(file_exists(__DIR__ . "/../../../includes/helpers.php")){
  73. require_once(__DIR__ . "/../../../includes/helpers.php");
  74. }
  75. }
  76. if(file_exists("includes/functions.php")){
  77. require_once("includes/functions.php");
  78. }else{
  79. if(file_exists(__DIR__ . "/../../../includes/functions.php")){
  80. require_once(__DIR__ . "/../../../includes/functions.php");
  81. }
  82. }
  83. if(function_exists("getClientIPAddress")){
  84. $client_ip = getClientIPAddress();
  85. }else{
  86. $client_ip = $_SERVER['REMOTE_ADDR'];
  87. }
  88. if(function_exists("startSession")){
  89. startSession();
  90. }else{
  91. session_name("opengamepanel_web");
  92. session_start();
  93. }
  94. // Check if the session ID and the IP address have changed
  95. if (isset($_SESSION["net2ftp_session_id_new"]) == true) { $_SESSION["net2ftp_session_id_old"] = $_SESSION["net2ftp_session_id_new"]; }
  96. else { $_SESSION["net2ftp_session_id_old"] = ""; }
  97. if (isset($_SESSION["net2ftp_remote_addr_new"]) == true) { $_SESSION["net2ftp_remote_addr_old"] = $_SESSION["net2ftp_remote_addr_new"]; }
  98. else { $_SESSION["net2ftp_remote_addr_old"] = ""; }
  99. $_SESSION["net2ftp_session_id_new"] = session_id();
  100. $_SESSION["net2ftp_remote_addr_new"] = $client_ip;
  101. // -------------------------------------------------------------------------
  102. // 3 SERVER variabes
  103. // -------------------------------------------------------------------------
  104. if (isset($_SERVER["SCRIPT_NAME"]) == true) { $net2ftp_globals["PHP_SELF"] = validateGenericInput($_SERVER["SCRIPT_NAME"]); }
  105. elseif (isset($_SERVER["PHP_SELF"]) == true) { $net2ftp_globals["PHP_SELF"] = validateGenericInput($_SERVER["PHP_SELF"]); }
  106. else { $net2ftp_globals["PHP_SELF"] = "index.php"; }
  107. if (isset($_SERVER["HTTP_REFERER"]) == true) { $net2ftp_globals["HTTP_REFERER"] = validateGenericInput($_SERVER["HTTP_REFERER"]); }
  108. else { $net2ftp_globals["HTTP_REFERER"] = ""; }
  109. if (isset($_SERVER["HTTP_USER_AGENT"]) == true) { $net2ftp_globals["HTTP_USER_AGENT"] = validateGenericInput($_SERVER["HTTP_USER_AGENT"]); }
  110. if (isset($client_ip) == true) { $net2ftp_globals["REMOTE_ADDR"] = validateGenericInput($client_ip); }
  111. if (isset($_SERVER["REMOTE_PORT"]) == true) { $net2ftp_globals["REMOTE_PORT"] = validateGenericInput($_SERVER["REMOTE_PORT"]); }
  112. // Action URL
  113. // Note that later on in this file parameters may be appended to the action_url (for Mambo and Drupal)
  114. $net2ftp_globals["action_url"] = $net2ftp_globals["PHP_SELF"];
  115. // -------------------------------------------------------------------------
  116. // 4 Register main variables
  117. // -------------------------------------------------------------------------
  118. // ----------------------------------------------
  119. // FTP server
  120. // ----------------------------------------------
  121. if (isset($_POST["ftpserver"]) == true) { $net2ftp_globals["ftpserver"] = validateFtpserver($_POST["ftpserver"]); }
  122. elseif (isset($_GET["ftpserver"]) == true) { $net2ftp_globals["ftpserver"] = validateFtpserver($_GET["ftpserver"]); }
  123. else { $net2ftp_globals["ftpserver"] = validateFtpserver(""); }
  124. $net2ftp_globals["ftpserver_html"] = htmlEncode2($net2ftp_globals["ftpserver"]);
  125. $net2ftp_globals["ftpserver_url"] = urlEncode2($net2ftp_globals["ftpserver"]);
  126. $net2ftp_globals["ftpserver_js"] = javascriptEncode2($net2ftp_globals["ftpserver"]);
  127. // ----------------------------------------------
  128. // FTP server port
  129. // ----------------------------------------------
  130. if (isset($_POST["ftpserverport"]) == true) { $net2ftp_globals["ftpserverport"] = validateFtpserverport($_POST["ftpserverport"]); }
  131. elseif (isset($_GET["ftpserverport"]) == true) { $net2ftp_globals["ftpserverport"] = validateFtpserverport($_GET["ftpserverport"]); }
  132. else { $net2ftp_globals["ftpserverport"] = validateFtpserverport(""); }
  133. $net2ftp_globals["ftpserverport_html"] = htmlEncode2($net2ftp_globals["ftpserverport"]);
  134. $net2ftp_globals["ftpserverport_url"] = urlEncode2($net2ftp_globals["ftpserverport"]);
  135. $net2ftp_globals["ftpserverport_js"] = javascriptEncode2($net2ftp_globals["ftpserverport"]);
  136. // ----------------------------------------------
  137. // Username
  138. // ----------------------------------------------
  139. if (isset($_POST["username"]) == true) { $net2ftp_globals["username"] = validateUsername($_POST["username"]); }
  140. elseif (isset($_GET["username"]) == true) { $net2ftp_globals["username"] = validateUsername($_GET["username"]); }
  141. else { $net2ftp_globals["username"] = validateUsername(""); }
  142. $net2ftp_globals["username_html"] = htmlEncode2($net2ftp_globals["username"]);
  143. $net2ftp_globals["username_url"] = urlEncode2($net2ftp_globals["username"]);
  144. $net2ftp_globals["username_js"] = javascriptEncode2($net2ftp_globals["username"]);
  145. // ----------------------------------------------
  146. // Password
  147. // ----------------------------------------------
  148. // From login form
  149. if (isset($_POST["password"]) == true) {
  150. $net2ftp_globals["password_encrypted"] = encryptPassword(trim($_POST["password"]));
  151. $_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]] = encryptPassword(trim($_POST["password"]));
  152. $_SESSION["net2ftp_session_id_old"] = $_SESSION["net2ftp_session_id_new"];
  153. }
  154. // From the login_small form (from a bookmark)
  155. elseif (isset($_GET["password_encrypted"]) == true) {
  156. $net2ftp_globals["password_encrypted"] = validatePasswordEncrypted($_GET["password_encrypted"]);
  157. $_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]] = $net2ftp_globals["password_encrypted"];
  158. $_SESSION["net2ftp_session_id_old"] = $_SESSION["net2ftp_session_id_new"];
  159. }
  160. // From the openlaszlo skin
  161. elseif (isset($_POST["password_encrypted"]) == true) {
  162. $net2ftp_globals["password_encrypted"] = trim($_POST["password_encrypted"]);
  163. $_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]] = trim($_POST["password_encrypted"]);
  164. $_SESSION["net2ftp_session_id_old"] = $_SESSION["net2ftp_session_id_new"];
  165. }
  166. // ----------------------------------------------
  167. // Language
  168. // ----------------------------------------------
  169. if (isset($_POST["language"]) == true) { $net2ftp_globals["language"] = validateLanguage($_POST["language"]); }
  170. elseif (isset($_GET["language"]) == true) { $net2ftp_globals["language"] = validateLanguage($_GET["language"]); }
  171. else { $net2ftp_globals["language"] = validateLanguage(""); }
  172. $net2ftp_globals["language_html"] = htmlEncode2($net2ftp_globals["language"]);
  173. $net2ftp_globals["language_url"] = urlEncode2($net2ftp_globals["language"]);
  174. $net2ftp_globals["language_js"] = javascriptEncode2($net2ftp_globals["language"]);
  175. // ----------------------------------------------
  176. // Skin
  177. // ----------------------------------------------
  178. if (isset($_POST["skin"]) == true) { $net2ftp_globals["skin"] = validateSkin($_POST["skin"]); }
  179. elseif (isset($_GET["skin"]) == true) { $net2ftp_globals["skin"] = validateSkin($_GET["skin"]); }
  180. else { $net2ftp_globals["skin"] = validateSkin(""); }
  181. $net2ftp_globals["skin_html"] = htmlEncode2($net2ftp_globals["skin"]);
  182. $net2ftp_globals["skin_url"] = urlEncode2($net2ftp_globals["skin"]);
  183. $net2ftp_globals["skin_js"] = javascriptEncode2($net2ftp_globals["skin"]);
  184. $skinArray = getSkinArray();
  185. $net2ftp_globals["image_url"] = $skinArray[$net2ftp_globals["skin"]]["image_url"];
  186. // ----------------------------------------------
  187. // FTP mode
  188. // ----------------------------------------------
  189. if (isset($_POST["ftpmode"]) == true) { $net2ftp_globals["ftpmode"] = validateFtpmode($_POST["ftpmode"]); }
  190. elseif (isset($_GET["ftpmode"]) == true) { $net2ftp_globals["ftpmode"] = validateFtpmode($_GET["ftpmode"]); }
  191. else { $net2ftp_globals["ftpmode"] = validateFtpmode(""); }
  192. $net2ftp_globals["ftpmode_html"] = htmlEncode2($net2ftp_globals["ftpmode"]);
  193. $net2ftp_globals["ftpmode_url"] = urlEncode2($net2ftp_globals["ftpmode"]);
  194. $net2ftp_globals["ftpmode_js"] = javascriptEncode2($net2ftp_globals["ftpmode"]);
  195. // ----------------------------------------------
  196. // Passive mode
  197. // ----------------------------------------------
  198. if (isset($_POST["passivemode"]) == true) { $net2ftp_globals["passivemode"] = validatePassivemode($_POST["passivemode"]); }
  199. elseif (isset($_GET["passivemode"]) == true) { $net2ftp_globals["passivemode"] = validatePassivemode($_GET["passivemode"]); }
  200. else { $net2ftp_globals["passivemode"] = validatePassivemode(""); }
  201. $net2ftp_globals["passivemode_html"] = htmlEncode2($net2ftp_globals["passivemode"]);
  202. $net2ftp_globals["passivemode_url"] = urlEncode2($net2ftp_globals["passivemode"]);
  203. $net2ftp_globals["passivemode_js"] = javascriptEncode2($net2ftp_globals["passivemode"]);
  204. // ----------------------------------------------
  205. // Protocol (FTP, FTP with SSL, FTP over SSH)
  206. // ----------------------------------------------
  207. if (isset($_POST["protocol"]) == true) { $net2ftp_globals["protocol"] = validateProtocol($_POST["protocol"]); }
  208. elseif (isset($_GET["protocol"]) == true) { $net2ftp_globals["protocol"] = validateProtocol($_GET["protocol"]); }
  209. else { $net2ftp_globals["protocol"] = validateProtocol(""); }
  210. $net2ftp_globals["protocol_html"] = htmlEncode2($net2ftp_globals["protocol"]);
  211. $net2ftp_globals["protocol_url"] = urlEncode2($net2ftp_globals["protocol"]);
  212. $net2ftp_globals["protocol_js"] = javascriptEncode2($net2ftp_globals["protocol"]);
  213. // ----------------------------------------------
  214. // View mode
  215. // ----------------------------------------------
  216. if (isset($_POST["viewmode"]) == true) { $net2ftp_globals["viewmode"] = validateViewmode($_POST["viewmode"]); }
  217. elseif (isset($_GET["viewmode"]) == true) { $net2ftp_globals["viewmode"] = validateViewmode($_GET["viewmode"]); }
  218. else { $net2ftp_globals["viewmode"] = validateViewmode(""); }
  219. $net2ftp_globals["viewmode_html"] = htmlEncode2($net2ftp_globals["viewmode"]);
  220. $net2ftp_globals["viewmode_url"] = urlEncode2($net2ftp_globals["viewmode"]);
  221. $net2ftp_globals["viewmode_js"] = javascriptEncode2($net2ftp_globals["viewmode"]);
  222. // ----------------------------------------------
  223. // Sort
  224. // ----------------------------------------------
  225. if (isset($_POST["sort"]) == true) { $net2ftp_globals["sort"] = validateSort($_POST["sort"]); }
  226. elseif (isset($_GET["sort"]) == true) { $net2ftp_globals["sort"] = validateSort($_GET["sort"]); }
  227. else { $net2ftp_globals["sort"] = validateSort(""); }
  228. $net2ftp_globals["sort_html"] = htmlEncode2($net2ftp_globals["sort"]);
  229. $net2ftp_globals["sort_url"] = urlEncode2($net2ftp_globals["sort"]);
  230. $net2ftp_globals["sort_js"] = javascriptEncode2($net2ftp_globals["sort"]);
  231. // ----------------------------------------------
  232. // Sort order
  233. // ----------------------------------------------
  234. if (isset($_POST["sortorder"]) == true) { $net2ftp_globals["sortorder"] = validateSortorder($_POST["sortorder"]); }
  235. elseif (isset($_GET["sortorder"]) == true) { $net2ftp_globals["sortorder"] = validateSortorder($_GET["sortorder"]); }
  236. else { $net2ftp_globals["sortorder"] = validateSortorder(""); }
  237. $net2ftp_globals["sortorder_html"] = htmlEncode2($net2ftp_globals["sortorder"]);
  238. $net2ftp_globals["sortorder_url"] = urlEncode2($net2ftp_globals["sortorder"]);
  239. $net2ftp_globals["sortorder_js"] = javascriptEncode2($net2ftp_globals["sortorder"]);
  240. // ----------------------------------------------
  241. // State
  242. // ----------------------------------------------
  243. if (isset($_POST["state"]) == true) { $net2ftp_globals["state"] = validateState($_POST["state"]); }
  244. elseif (isset($_GET["state"]) == true) { $net2ftp_globals["state"] = validateState($_GET["state"]); }
  245. else { $net2ftp_globals["state"] = validateState(""); }
  246. $net2ftp_globals["state_html"] = htmlEncode2($net2ftp_globals["state"]);
  247. $net2ftp_globals["state_url"] = urlEncode2($net2ftp_globals["state"]);
  248. $net2ftp_globals["state_js"] = javascriptEncode2($net2ftp_globals["state"]);
  249. // ----------------------------------------------
  250. // State2
  251. // ----------------------------------------------
  252. if (isset($_POST["state2"]) == true) { $net2ftp_globals["state2"] = validateState2($_POST["state2"]); }
  253. elseif (isset($_GET["state2"]) == true) { $net2ftp_globals["state2"] = validateState2($_GET["state2"]); }
  254. else { $net2ftp_globals["state2"] = validateState2(""); }
  255. $net2ftp_globals["state2_html"] = htmlEncode2($net2ftp_globals["state2"]);
  256. $net2ftp_globals["state2_url"] = urlEncode2($net2ftp_globals["state2"]);
  257. $net2ftp_globals["state2_js"] = javascriptEncode2($net2ftp_globals["state2"]);
  258. // ----------------------------------------------
  259. // Directory
  260. // ----------------------------------------------
  261. if (isset($_POST["directory"]) == true) { $net2ftp_globals["directory"] = validateDirectory($_POST["directory"]); }
  262. elseif (isset($_GET["directory"]) == true) { $net2ftp_globals["directory"] = validateDirectory($_GET["directory"]); }
  263. else { $net2ftp_globals["directory"] = ""; }
  264. $net2ftp_globals["directory_html"] = htmlEncode2($net2ftp_globals["directory"]);
  265. $net2ftp_globals["directory_url"] = urlEncode2($net2ftp_globals["directory"]);
  266. $net2ftp_globals["directory_js"] = javascriptEncode2($net2ftp_globals["directory"]);
  267. // printdirectory
  268. if ($net2ftp_globals["directory"] != "" && $net2ftp_globals["directory"] != "/") {
  269. $net2ftp_globals["printdirectory"] = $net2ftp_globals["directory"];
  270. }
  271. else {
  272. $net2ftp_globals["printdirectory"] = "/";
  273. }
  274. // ----------------------------------------------
  275. // Entry
  276. // ----------------------------------------------
  277. if (isset($_POST["entry"]) == true) { $net2ftp_globals["entry"] = validateEntry($_POST["entry"]); }
  278. elseif (isset($_GET["entry"]) == true) { $net2ftp_globals["entry"] = validateEntry($_GET["entry"]); }
  279. else { $net2ftp_globals["entry"] = ""; }
  280. $net2ftp_globals["entry_html"] = htmlEncode2($net2ftp_globals["entry"]);
  281. $net2ftp_globals["entry_url"] = urlEncode2($net2ftp_globals["entry"]);
  282. $net2ftp_globals["entry_js"] = javascriptEncode2($net2ftp_globals["entry"]);
  283. // ----------------------------------------------
  284. // Screen
  285. // ----------------------------------------------
  286. if (isset($_POST["screen"]) == true) { $net2ftp_globals["screen"] = validateScreen($_POST["screen"]); }
  287. elseif (isset($_GET["screen"]) == true) { $net2ftp_globals["screen"] = validateScreen($_GET["screen"]); }
  288. else { $net2ftp_globals["screen"] = validateScreen(""); }
  289. $net2ftp_globals["screen_html"] = htmlEncode2($net2ftp_globals["screen"]);
  290. $net2ftp_globals["screen_url"] = urlEncode2($net2ftp_globals["screen"]);
  291. $net2ftp_globals["screen_js"] = javascriptEncode2($net2ftp_globals["screen"]);
  292. // ----------------------------------------------
  293. // MAMBO variables
  294. // ----------------------------------------------
  295. if (defined("_VALID_MOS") == true) {
  296. $option = validateGenericInput($_GET["option"]);
  297. $Itemid = validateGenericInput($_GET["Itemid"]);
  298. $net2ftp_globals["action_url"] .= "?option=$option&amp;Itemid=$Itemid";
  299. }
  300. // ----------------------------------------------
  301. // DRUPAL variables
  302. // ----------------------------------------------
  303. if (defined("CACHE_PERMANENT") == true) {
  304. $q = validateGenericInput($_GET["q"]);
  305. $net2ftp_globals["action_url"] .= "?q=$q";
  306. }
  307. // -------------------------------------------------------------------------
  308. // 5.1 Delete the session data when logging out
  309. // -------------------------------------------------------------------------
  310. if ($net2ftp_globals["state"] == "logout") {
  311. $_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]] = "";
  312. }
  313. // -------------------------------------------------------------------------
  314. // 5.2 Redirect to login_small
  315. // if session has expired (not for OpenLaszlo skin as it does not make a connection on the Login screen)
  316. // if the IP address has changed (disabled as this may cause problems for some people)
  317. // if the password is blank
  318. // -------------------------------------------------------------------------
  319. //if ($net2ftp_globals["state"] != "login" && $net2ftp_globals["state"] != "login_small" &&
  320. // $_SESSION["net2ftp_session_id_old"] != $_SESSION["net2ftp_session_id_new"]) {
  321. // $net2ftp_globals["go_to_state"] = $net2ftp_globals["state"];
  322. // $net2ftp_globals["go_to_state2"] = $net2ftp_globals["state2"];
  323. // $net2ftp_globals["state"] = "login_small";
  324. // $net2ftp_globals["state2"] = "session_expired";
  325. //}
  326. //elseif ($net2ftp_globals["state"] != "login" && $net2ftp_globals["state"] != "login_small" &&
  327. // $_SESSION["net2ftp_remote_addr_old"] != $_SESSION["net2ftp_remote_addr_new"]) {
  328. // $net2ftp_globals["go_to_state"] = $net2ftp_globals["state"];
  329. // $net2ftp_globals["go_to_state2"] = $net2ftp_globals["state2"];
  330. // $net2ftp_globals["state"] = "login_small";
  331. // $net2ftp_globals["state2"] = "session_ipchanged";
  332. //}
  333. //elseif (substr($net2ftp_globals["state"], 0, 5) != "admin" && $net2ftp_globals["state"] != "clearcookies" &&
  334. // $net2ftp_globals["state"] != "login" && $net2ftp_globals["state"] != "login_small" &&
  335. // $net2ftp_globals["state"] != "logout" && $_SESSION["net2ftp_password_encrypted_" . $net2ftp_globals["ftpserver"] . $net2ftp_globals["username"]] == "") {
  336. // $net2ftp_globals["state"] = "login";
  337. // $net2ftp_globals["state2"] = "";
  338. //}
  339. // -------------------------------------------------------------------------
  340. // 6 COOKIE variabes
  341. // -------------------------------------------------------------------------
  342. if (isset($_COOKIE["net2ftpcookie_ftpserver"]) == true) { $net2ftp_globals["cookie_ftpserver"] = validateFtpserver($_COOKIE["net2ftpcookie_ftpserver"]); }
  343. else { $net2ftp_globals["cookie_ftpserver"] = ""; }
  344. if (isset($_COOKIE["net2ftpcookie_ftpserverport"]) == true) { $net2ftp_globals["cookie_ftpserverport"] = validateFtpserverport($_COOKIE["net2ftpcookie_ftpserverport"]); }
  345. else { $net2ftp_globals["cookie_ftpserverport"] = ""; }
  346. if (isset($_COOKIE["net2ftpcookie_username"]) == true) { $net2ftp_globals["cookie_username"] = validateUsername($_COOKIE["net2ftpcookie_username"]); }
  347. else { $net2ftp_globals["cookie_username"] = ""; }
  348. if (isset($_COOKIE["net2ftpcookie_language"]) == true) { $net2ftp_globals["cookie_language"] = validateLanguage($_COOKIE["net2ftpcookie_language"]); }
  349. else { $net2ftp_globals["cookie_language"] = ""; }
  350. if (isset($_COOKIE["net2ftpcookie_skin"]) == true) { $net2ftp_globals["cookie_skin"] = validateSkin($_COOKIE["net2ftpcookie_skin"]); }
  351. else { $net2ftp_globals["cookie_skin"] = ""; }
  352. if (isset($_COOKIE["net2ftpcookie_ftpmode"]) == true) { $net2ftp_globals["cookie_ftpmode"] = validateFtpmode($_COOKIE["net2ftpcookie_ftpmode"]); }
  353. else { $net2ftp_globals["cookie_ftpmode"] = ""; }
  354. if (isset($_COOKIE["net2ftpcookie_passivemode"]) == true) { $net2ftp_globals["cookie_passivemode"] = validatePassivemode($_COOKIE["net2ftpcookie_passivemode"]); }
  355. else { $net2ftp_globals["cookie_passivemode"] = ""; }
  356. if (isset($_COOKIE["net2ftpcookie_protocol"]) == true) { $net2ftp_globals["cookie_protocol"] = validateProtocol($_COOKIE["net2ftpcookie_protocol"]); }
  357. else { $net2ftp_globals["cookie_protocol"] = ""; }
  358. if (isset($_COOKIE["net2ftpcookie_viewmode"]) == true) { $net2ftp_globals["cookie_viewmode"] = validateViewmode($_COOKIE["net2ftpcookie_viewmode"]); }
  359. else { $net2ftp_globals["cookie_viewmode"] = ""; }
  360. if (isset($_COOKIE["net2ftpcookie_directory"]) == true) { $net2ftp_globals["cookie_directory"] = validateDirectory($_COOKIE["net2ftpcookie_directory"]); }
  361. else { $net2ftp_globals["cookie_directory"] = ""; }
  362. if (isset($_COOKIE["net2ftpcookie_sort"]) == true) { $net2ftp_globals["cookie_sort"] = validateSort($_COOKIE["net2ftpcookie_sort"]); }
  363. else { $net2ftp_globals["cookie_sort"] = ""; }
  364. if (isset($_COOKIE["net2ftpcookie_sortorder"]) == true) { $net2ftp_globals["cookie_sortorder"] = validateSortorder($_COOKIE["net2ftpcookie_sortorder"]); }
  365. else { $net2ftp_globals["cookie_sortorder"] = ""; }
  366. // -------------------------------------------------------------------------
  367. // 7 Get information about the browser and protocol
  368. // -------------------------------------------------------------------------
  369. $net2ftp_globals["browser_agent"] = getBrowser("agent");
  370. $net2ftp_globals["browser_version"] = getBrowser("version");
  371. $net2ftp_globals["browser_platform"] = getBrowser("platform");
  372. // **************************************************************************************
  373. // **************************************************************************************
  374. // ** **
  375. // ** **
  376. function remove_magic_quotes(&$x, $keyname="") {
  377. // http://www.php.net/manual/en/configuration.php#ini.magic-quotes-gpc (by the way: gpc = get post cookie)
  378. // if (magic_quotes_gpc == 1), then PHP converts automatically " --> \", ' --> \'
  379. // Has only to be done when getting info from get post cookie
  380. if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() == 1) {
  381. if (is_array($x)) {
  382. foreach ($x as $key => $value) {
  383. if ($value) { remove_magic_quotes($x[$key],$key); }
  384. }
  385. }
  386. else {
  387. $quote = "'";
  388. $doublequote = "\"";
  389. $backslash = "\\";
  390. $x = str_replace("$backslash$quote", $quote, $x);
  391. $x = str_replace("$backslash$doublequote", $doublequote, $x);
  392. $x = str_replace("$backslash$backslash", $backslash, $x);
  393. }
  394. } // end if get_magic_quotes_gpc
  395. return $x;
  396. } // end function remove_magic_quotes
  397. // ** **
  398. // ** **
  399. // **************************************************************************************
  400. // **************************************************************************************
  401. // **************************************************************************************
  402. // **************************************************************************************
  403. // ** **
  404. // ** **
  405. function validateFtpserver($ftpserver) {
  406. // --------------
  407. // Input: " ftp://something.domainname.com:123/directory/file "
  408. // Output: "something.domainname.com"
  409. // --------------
  410. // Remove invisible characters in the beginning and at the end
  411. $ftpserver = trim($ftpserver);
  412. // Remove possible "ftp://"
  413. if (substr($ftpserver, 0, 6) == "ftp://") {
  414. $ftpserver = substr($ftpserver, 6);
  415. }
  416. // Remove a possible port nr ":123"
  417. if (preg_match("/(.*)[:]{1}[0-9]+/", $ftpserver, $regs) == true) {
  418. $ftpserver = $regs[1];
  419. }
  420. // Remove a possible trailing / or \
  421. // Remove a possible directory and file "/directory/file"
  422. if (preg_match("/[\\/\\\\]*(.*)[\\/\\\\]{1,}.*/", $ftpserver, $regs) == true) {
  423. // Any characters like / or \
  424. // Anything
  425. // Followed by at least one / or \
  426. // Followed by any characters
  427. $ftpserver = $regs[1];
  428. }
  429. // FTP server may only contain specific characters
  430. $ftpserver = preg_replace("/[^A-Za-z0-9._-]/", "", $ftpserver);
  431. return $ftpserver;
  432. } // end validateFTPserver
  433. // ** **
  434. // ** **
  435. // **************************************************************************************
  436. // **************************************************************************************
  437. // **************************************************************************************
  438. // **************************************************************************************
  439. // ** **
  440. // ** **
  441. function validateFtpserverport($ftpserverport) {
  442. // --------------
  443. // This function validates the FTP server port
  444. // --------------
  445. // Remove invisible characters in the beginning and at the end
  446. $ftpserverport = trim($ftpserverport);
  447. // FTP server port must be numeric and > 0 and < 65536, else set it to 21
  448. if (is_numeric($ftpserverport) != true || $ftpserverport < 0 || $ftpserverport > 65536) {
  449. $ftpserverport = 21;
  450. }
  451. return $ftpserverport;
  452. } // end validateFtpserverport
  453. // ** **
  454. // ** **
  455. // **************************************************************************************
  456. // **************************************************************************************
  457. // **************************************************************************************
  458. // **************************************************************************************
  459. // ** **
  460. // ** **
  461. function validateUsername($username) {
  462. // --------------
  463. // This function validates the username
  464. // --------------
  465. // Remove invisible characters in the beginning and at the end
  466. $username = trim($username);
  467. // Remove XSS code
  468. // $username = RemoveXSS($username);
  469. return $username;
  470. } // end validateUsername
  471. // ** **
  472. // ** **
  473. // **************************************************************************************
  474. // **************************************************************************************
  475. // **************************************************************************************
  476. // **************************************************************************************
  477. // ** **
  478. // ** **
  479. function validatePasswordEncrypted($password_encrypted) {
  480. // --------------
  481. // This function validates the encrypted password
  482. // --------------
  483. // Remove invisible characters in the beginning and at the end
  484. $password_encrypted = trim($password_encrypted);
  485. // Encrypted password may only contain specific characters
  486. $password_encrypted = preg_replace("/[^A-Fa-f0-9]/", "", $password_encrypted);
  487. return $password_encrypted;
  488. } // end validatePasswordEncrypted
  489. // ** **
  490. // ** **
  491. // **************************************************************************************
  492. // **************************************************************************************
  493. // **************************************************************************************
  494. // **************************************************************************************
  495. // ** **
  496. // ** **
  497. function validatePassword($password) {
  498. // --------------
  499. // This function validates the plain password
  500. // --------------
  501. // Remove invisible characters in the beginning and at the end
  502. $password = trim($password);
  503. // Remove XSS code
  504. // $password = RemoveXSS($password);
  505. return $password;
  506. } // end validatePassword
  507. // ** **
  508. // ** **
  509. // **************************************************************************************
  510. // **************************************************************************************
  511. // **************************************************************************************
  512. // **************************************************************************************
  513. // ** **
  514. // ** **
  515. function validateLanguage($language) {
  516. // --------------
  517. // This function validates the language
  518. // --------------
  519. global $net2ftp_settings;
  520. $languageArray = getLanguageArray();
  521. if (isset($languageArray[$language]) == true) {
  522. return $language;
  523. }
  524. elseif (isset($_COOKIE["net2ftpcookie_language"]) == true && isset($languageArray[$_COOKIE["net2ftpcookie_language"]]) == true) {
  525. return $_COOKIE["net2ftpcookie_language"];
  526. }
  527. elseif (isset($languageArray[$net2ftp_settings["default_language"]]) == true){
  528. return $net2ftp_settings["default_language"];
  529. }
  530. else {
  531. return "en";
  532. }
  533. } // end validateLanguage
  534. // ** **
  535. // ** **
  536. // **************************************************************************************
  537. // **************************************************************************************
  538. // **************************************************************************************
  539. // **************************************************************************************
  540. // ** **
  541. // ** **
  542. function validateSkin($skin) {
  543. // --------------
  544. // This function validates the skin
  545. // --------------
  546. global $net2ftp_settings;
  547. $skinArray = getSkinArray();
  548. if (isset($skinArray[$skin]) == true) {
  549. return $skin;
  550. }
  551. elseif (isset($_COOKIE["net2ftpcookie_skin"]) == true && isset($skinArray[$_COOKIE["net2ftpcookie_skin"]]) == true) {
  552. return $_COOKIE["net2ftpcookie_skin"];
  553. }
  554. else {
  555. if (defined("_VALID_MOS") == true) { return "mambo"; }
  556. elseif (defined("CACHE_PERMANENT") == true) { return "drupal"; }
  557. elseif (defined("XOOPS_ROOT_PATH") == true) { return "xoops"; }
  558. elseif (getBrowser("platform") == "iPhone") { return "iphone"; }
  559. elseif (getBrowser("platform") == "Mobile") { return "mobile"; }
  560. elseif (isset($skinArray[$net2ftp_settings["default_skin"]]) == true) { return $net2ftp_settings["default_skin"]; }
  561. else { return "shinra"; }
  562. }
  563. } // end validateSkin
  564. // ** **
  565. // ** **
  566. // **************************************************************************************
  567. // **************************************************************************************
  568. // **************************************************************************************
  569. // **************************************************************************************
  570. // ** **
  571. // ** **
  572. function validateFtpmode($ftpmode) {
  573. // --------------
  574. // This function validates the FTP mode
  575. // --------------
  576. if ($ftpmode == "ascii" || $ftpmode == "binary" || $ftpmode == "automatic") {
  577. return $ftpmode;
  578. }
  579. elseif (isset($_COOKIE["net2ftpcookie_ftpmode"]) == true && ($_COOKIE["net2ftpcookie_ftpmode"] == "ascii" || $_COOKIE["net2ftpcookie_ftpmode"] == "binary" || $_COOKIE["net2ftpcookie_ftpmode"] == "automatic")) {
  580. return $_COOKIE["net2ftpcookie_ftpmode"];
  581. }
  582. else {
  583. // Before PHP version 4.3.11, bug 27633 can cause problems in ASCII mode ==> use BINARY mode
  584. // As from PHP version 4.3.11, bug 27633 is fixed ==> use Automatic mode
  585. if (version_compare(phpversion(), "4.3.11", "<")) { return "binary"; }
  586. else { return "automatic"; }
  587. }
  588. } // end validateFtpmode
  589. // ** **
  590. // ** **
  591. // **************************************************************************************
  592. // **************************************************************************************
  593. // **************************************************************************************
  594. // **************************************************************************************
  595. // ** **
  596. // ** **
  597. function validatePassivemode($passivemode) {
  598. // --------------
  599. // This function validates the passive mode
  600. // --------------
  601. if ($passivemode != "yes") {
  602. $passivemode = "no";
  603. }
  604. return $passivemode;
  605. } // end validatePassivemode
  606. // ** **
  607. // ** **
  608. // **************************************************************************************
  609. // **************************************************************************************
  610. // **************************************************************************************
  611. // **************************************************************************************
  612. // ** **
  613. // ** **
  614. function validateProtocol($protocol) {
  615. // --------------
  616. // This function validates the protocol
  617. // --------------
  618. if ($protocol == "FTP" || $protocol == "FTP-SSL" || $protocol == "FTP-SSH") {
  619. return $protocol;
  620. }
  621. else {
  622. return "FTP";
  623. }
  624. } // end validateProtocol
  625. // ** **
  626. // ** **
  627. // **************************************************************************************
  628. // **************************************************************************************
  629. // **************************************************************************************
  630. // **************************************************************************************
  631. // ** **
  632. // ** **
  633. function validateViewmode($viewmode) {
  634. // --------------
  635. // This function validates the view mode
  636. // --------------
  637. if ($viewmode != "icons") {
  638. $viewmode = "list";
  639. }
  640. return $viewmode;
  641. } // end validateViewmode
  642. // ** **
  643. // ** **
  644. // **************************************************************************************
  645. // **************************************************************************************
  646. // **************************************************************************************
  647. // **************************************************************************************
  648. // ** **
  649. // ** **
  650. function validateSort($sort) {
  651. // --------------
  652. // This function validates the sorting criteria
  653. // --------------
  654. if ( $sort != "" &&
  655. $sort != "dirfilename" &&
  656. $sort != "type" &&
  657. $sort != "size" &&
  658. $sort != "owner" &&
  659. $sort != "group" &&
  660. $sort != "permissions" &&
  661. $sort != "mtime") {
  662. $sort = "dirfilename";
  663. }
  664. return $sort;
  665. } // end validateSort
  666. // ** **
  667. // ** **
  668. // **************************************************************************************
  669. // **************************************************************************************
  670. // **************************************************************************************
  671. // **************************************************************************************
  672. // ** **
  673. // ** **
  674. function validateSortorder($sortorder) {
  675. // --------------
  676. // This function validates the sort order
  677. // --------------
  678. if ( $sortorder != "" &&
  679. $sortorder != "descending") {
  680. $sortorder = "ascending";
  681. }
  682. return $sortorder;
  683. } // end validateSortorder
  684. // ** **
  685. // ** **
  686. // **************************************************************************************
  687. // **************************************************************************************
  688. // **************************************************************************************
  689. // **************************************************************************************
  690. // ** **
  691. // ** **
  692. function validateState($state) {
  693. // --------------
  694. // This function validates the state variable
  695. // --------------
  696. $statelist[] = "admin";
  697. $statelist[] = "admin_createtables";
  698. $statelist[] = "admin_emptylogs";
  699. $statelist[] = "admin_viewlogs";
  700. $statelist[] = "advanced";
  701. $statelist[] = "advanced_ftpserver";
  702. $statelist[] = "advanced_parsing";
  703. $statelist[] = "advanced_webserver";
  704. $statelist[] = "bookmark";
  705. $statelist[] = "browse";
  706. $statelist[] = "calculatesize";
  707. $statelist[] = "chmod";
  708. $statelist[] = "clearcookies";
  709. $statelist[] = "copymovedelete";
  710. $statelist[] = "downloadfile";
  711. $statelist[] = "downloadzip";
  712. $statelist[] = "edit";
  713. $statelist[] = "findstring";
  714. $statelist[] = "followsymlink";
  715. $statelist[] = "getcookies";
  716. $statelist[] = "install";
  717. $statelist[] = "jupload";
  718. $statelist[] = "login";
  719. $statelist[] = "login_small";
  720. $statelist[] = "logout";
  721. $statelist[] = "newdir";
  722. $statelist[] = "raw";
  723. $statelist[] = "rename";
  724. $statelist[] = "unzip";
  725. $statelist[] = "upload";
  726. $statelist[] = "view";
  727. $statelist[] = "zip";
  728. if (in_array($state, $statelist) == false) {
  729. $state = "login";
  730. }
  731. return $state;
  732. } // end validateState
  733. // ** **
  734. // ** **
  735. // **************************************************************************************
  736. // **************************************************************************************
  737. // **************************************************************************************
  738. // **************************************************************************************
  739. // ** **
  740. // ** **
  741. function validateState2($state2) {
  742. // --------------
  743. // This function validates the state2 variable
  744. // --------------
  745. if ($state2 != "") {
  746. // State2 may only contain specific characters
  747. $state2 = preg_replace("/[^A-Za-z0-9_-]/", "", $state2);
  748. }
  749. return $state2;
  750. } // end validateState2
  751. // ** **
  752. // ** **
  753. // **************************************************************************************
  754. // **************************************************************************************
  755. // **************************************************************************************
  756. // **************************************************************************************
  757. // ** **
  758. // ** **
  759. function validateEntry($entry) {
  760. // --------------
  761. // This function validates the entry
  762. // Remove the following characters \/:*?"<>|
  763. // --------------
  764. // Remove XSS code
  765. // $entry = RemoveXSS($entry);
  766. // Remove \ / : * ? < > |
  767. // Do not remove / or > otherwise the module "followsymlink" does not work
  768. // $entry = preg_replace("/[\\\\\\/\\:\\*\\?\\<\\>\\|]/", "", $entry);
  769. return $entry;
  770. } // end validateEntry
  771. // ** **
  772. // ** **
  773. // **************************************************************************************
  774. // **************************************************************************************
  775. // **************************************************************************************
  776. // **************************************************************************************
  777. // ** **
  778. // ** **
  779. function validateScreen($screen) {
  780. // --------------
  781. // This function validates the screen variable
  782. // --------------
  783. if ($screen != 1 && $screen != 2 && $screen != 3) {
  784. $screen = 1;
  785. }
  786. return $screen;
  787. } // end validateScreen
  788. // ** **
  789. // ** **
  790. // **************************************************************************************
  791. // **************************************************************************************
  792. // **************************************************************************************
  793. // **************************************************************************************
  794. // ** **
  795. // ** **
  796. function validateDirectory($directory) {
  797. // --------------
  798. // Input: "/dir1/dir2/dir3/../../dir4/dir5"
  799. // Output: "/dir1/dir4/dir5"
  800. // Remove the following characters \/:*?"<>|
  801. // --------------
  802. // -------------------------------------------------------------------------
  803. // Nothing to do if the directory is the root directory
  804. // -------------------------------------------------------------------------
  805. if ($directory == "") { return ""; }
  806. elseif ($directory == "/") { return "/"; }
  807. // -------------------------------------------------------------------------
  808. // Remove XSS code
  809. // -------------------------------------------------------------------------
  810. // $directory = RemoveXSS($directory);
  811. // -------------------------------------------------------------------------
  812. // Check if the directory contains ".."
  813. // -------------------------------------------------------------------------
  814. if (strpos($directory, "..") === false) {
  815. $directory = "/" . stripDirectory($directory);
  816. }
  817. else {
  818. $directory = stripDirectory($directory);
  819. // Split down into parts
  820. // directoryparts[0] contains the first part, directoryparts[1] the second,...
  821. $directoryparts = explode("/", $directory);
  822. // Start from the end
  823. // If you encounter N times a "..", do not take into account the next N parts which are not ".."
  824. // Example: "/dir1/dir2/dir3/../../dir4/dir5" ----> "/dir1/dir4/dir5"
  825. $doubledotcounter = 0;
  826. $newdirectory = "";
  827. $sizeof_directoryparts = sizeof($directoryparts);
  828. for ($i=$sizeof_directoryparts-1; $i>=0; $i=$i-1) {
  829. if ($directoryparts[$i] == "..") { $doubledotcounter = $doubledotcounter + 1; }
  830. else {
  831. if ($doubledotcounter == 0) { $newdirectory = $directoryparts[$i] . "/" . $newdirectory; } // Add the new part in front
  832. elseif ($doubledotcounter > 0) { $doubledotcounter = $doubledotcounter - 1; } // Don't add the part, and reduce the counter by 1
  833. }
  834. } // end for
  835. $directory = "/" . stripDirectory($newdirectory);
  836. } // end if else
  837. // Remove : * ? " < > |
  838. // $directory = preg_replace("/[\\:\\*\\?\\\"\\<\\>\\|]/", "", $directory);
  839. // Remove : * ? < > |
  840. $directory = preg_replace("/[\\:\\*\\?\\<\\>\\|]/", "", $directory);
  841. return $directory;
  842. } // end validateDirectory
  843. // ** **
  844. // ** **
  845. // **************************************************************************************
  846. // **************************************************************************************
  847. // **************************************************************************************
  848. // **************************************************************************************
  849. // ** **
  850. // ** **
  851. function validateGenericInput($input) {
  852. // --------------
  853. // Remove the following characters <>
  854. // --------------
  855. // Remove XSS code
  856. // $input = RemoveXSS($input);
  857. // Remove < >
  858. $input = preg_replace("/[\\<\\>]/", "", $input);
  859. return $input;
  860. } // end validateGenericInput
  861. // ** **
  862. // ** **
  863. // **************************************************************************************
  864. // **************************************************************************************
  865. // **************************************************************************************
  866. // **************************************************************************************
  867. // ** **
  868. // ** **
  869. function validateTextareaType($textareaType) {
  870. // --------------
  871. // Remove the following characters <>
  872. // --------------
  873. if ( $textareaType != "plain" &&
  874. $textareaType != "ckeditor" &&
  875. $textareaType != "tinymce" &&
  876. $textareaType != "ace") {
  877. $textareaType = "plain";
  878. }
  879. return $textareaType;
  880. } // end validateTextareaType
  881. // ** **
  882. // ** **
  883. // **************************************************************************************
  884. // **************************************************************************************
  885. // **************************************************************************************
  886. // **************************************************************************************
  887. // ** **
  888. // ** **
  889. function RemoveXSS($val) {
  890. // --------------
  891. // This function removes malicious cross-site scripting (XSS) code from user input
  892. // From http://quickwired.com/smallprojects/php_xss_filter_function.php
  893. // --------------
  894. // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
  895. // this prevents some character re-spacing such as <java\0script>
  896. // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
  897. $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);
  898. // straight replacements, the user should never need these since they're normal characters
  899. // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
  900. $search = 'abcdefghijklmnopqrstuvwxyz';
  901. $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  902. $search .= '1234567890!@#$%^&*()';
  903. $search .= '~`";:?+/={}[]-_|\'\\';
  904. for ($i = 0; $i < strlen($search); $i++) {
  905. // ;? matches the ;, which is optional
  906. // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
  907. // &#x0040 @ search for the hex values
  908. $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
  909. // &#00064 @ 0{0,7} matches '0' zero to seven times
  910. $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
  911. }
  912. // now the only remaining whitespace attacks are \t, \n, and \r
  913. $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
  914. $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
  915. $ra = array_merge($ra1, $ra2);
  916. $found = true; // keep replacing as long as the previous round replaced something
  917. while ($found == true) {
  918. $val_before = $val;
  919. for ($i = 0; $i < sizeof($ra); $i++) {
  920. $pattern = '/';
  921. for ($j = 0; $j < strlen($ra[$i]); $j++) {
  922. if ($j > 0) {
  923. $pattern .= '(';
  924. $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
  925. $pattern .= '|(&#0{0,8}([9][10][13]);?)?';
  926. $pattern .= ')?';
  927. }
  928. $pattern .= $ra[$i][$j];
  929. } // end for
  930. $pattern .= '/i';
  931. $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
  932. $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
  933. if ($val_before == $val) {
  934. // no replacements were made, so exit the loop
  935. $found = false;
  936. } // end if
  937. } // end for
  938. } // end while
  939. return $val;
  940. } // end RemoveXSS
  941. // ** **
  942. // ** **
  943. // **************************************************************************************
  944. // **************************************************************************************
  945. ?>