欢迎来到【1919的酒没有溯源码】【asp记账源码】【delphi 扫雷源码】htaccess 源码-皮皮网网站!!!

皮皮网

【1919的酒没有溯源码】【asp记账源码】【delphi 扫雷源码】htaccess 源码-皮皮网 扫描左侧二维码访问本站手机端

【1919的酒没有溯源码】【asp记账源码】【delphi 扫雷源码】htaccess 源码

2024-11-24 20:14:24 来源:{typename type="name"/} 分类:{typename type="name"/}

1.如何保护Wp-Config.Php文件
2.私有云存储(私有云存储器)
3.如何创建.htaccess如何创建微信公众号
4.盘点那些渗透测试中的源码奇*技巧
5.Rewrite的Rewrite介绍

htaccess 源码

如何保护Wp-Config.Php文件

       WordPress CMS的内容管理系统中,wp-config.php文件存储了非常敏感的源码信息,如安全密钥和数据库连接信息。源码因此,源码保护wp-config.php文件至关重要。源码以下是源码1919的酒没有溯源码一些保护wp-config.php文件的方法。

       1. 通过.htaccess文件保护:使用FTP客户端下载网站根目录中的源码.htaccess文件,并添加拒绝访问wp-config.php文件的源码代码,然后将文件上传回根目录。源码

       2. 移动wp-config.php:将wp-config.php文件移动到不可预测的源码位置,以提高安全性。源码这需要更改WordPress源代码并进行维护。源码

       3. 创建新的源码wp-config.php文件:创建一个名为config.php的新文件,并将其放置在非WWW可访问的源码目录中。将敏感数据从原wp-config.php文件移动到新文件中。源码

       总结:确保wp-config.php文件按上述步骤配置,并让用户了解最佳安全实践。在安装新插件时,asp记账源码检查是否存在已知漏洞,并在安全性和实用性之间取得平衡,以更好地保护wp-config.php文件和WordPress网站。

私有云存储(私有云存储器)

       现在云计算已经算不上一个新鲜词了,各大IT公司的产品都会套上一个“云”字来忽悠用户。相信大家都用过网盘,现在更流行的词应该叫“云存储”,像用的比较多国外的有Dropbox、SkyDrive,国内也有百度云网盘、sina微盘、腾讯微云网盘等等,我们可以用这些网盘在不同的设备上来存储/获取数据,如PC、智能手机、平板电脑等等,同时我们希望不同设备间的delphi 扫雷源码数据是同步的。

       我们将要搭建自己的云系统平台,更精确的说是一个云存储系统,正如上面的产品所提供的功能。我们将使用开源软件ownCloud来搭建自己的私有云。ownCloud起源于一个叫TheKDE云计算项目,现在已经适用于大多主流平台,它最早是KED的开发者FrankKarlitschek创建的,现在由一个ownCloudteam共同开发。

       下面教大家如何一步一步地搭建属于自己的云存储平台:

       第一步:预装软件。

       ownCloud内核是用PHP5写的,支持SQLite、MySQL、Oracle以及PostgreSQL等数据库。为了简单,我们将用MySQL数据库。在你的Linux系统下你需要安装以下软件:

       PHP安装包:php5,php5-gd,php-xml-parser,php5-intl数据库驱动:php5-mysqlCurl安装包:curl,libcurl3,php5-curlSMB客户端:smbclientWeb服务器:apache2如果你的Linux是基于Debian的,你可以运行下面的vc取反源码命令一键安装所有的软件:

       $sudoapt-getinstallapache2php5php5-gdphp-xml-parserphp5-intlphp5-sqlitephp5-mysqlsmbclientcurllibcurl3php5-curlmysql-server

       第二步:安装ownCloud——设置web根目录。

       从第三步:安装ownCloud——配置web服务器。

       这一步我们要为ownCloud配置Apache服务器,OwnCloud需要启用Apache上.htaccess文件,.htaccess文件提供了针对目录改变配置的方法。为了启用web服务器上的.htaccess,可以通过Apache配置文件的AllowOverride指令来设置。

       Directory/var/www/

       OptionsIndexesFollowSymLinksMultiViewsAllowOverrideAllOrderallow,denyallowfromall/Directory下一步我们需要启动Apache的mod_rewrite模块,mod_rewrite模块提供了实时地将访问者请求的静态URL地址映射为动态查询字符串的一种规则。运行下面的命令来启动这个模块:

       $sudoa2enmodrewrite$sudoa2enmodheaders一旦你使能了这个必要的模块,你可以重启apache服务来使之生效:$sudoserviceapache2restart

       第四步:安装OwnCloud——安装运行。

       在浏览器中打开第五步:使用桌面同步客户端同步文件。

       你可以使用桌面同步客户端同步不同电脑、设备上的文件,适用于Linux、OSX和Windows系统。跟ownCloud一样,桌面同步客户端也是加密源码破解开源的。

       例如Ubuntu下,你可以通过apt-get安装:

       $sudoapt-getinstallowncloud-client对于其他的发行版,你可以通过这个URL下载ownCloud的桌面同步客户端:第六步:使用移动同步客户端同步文件。

       ownCloud文件同步不仅仅局限于桌面端,你也可以使用ownCloud的移动同步客户端同步你的文件,ownCloud移动应用适用于Andorid、iOS平台。Andorid版的应用允许你从任何Android应用上传文件,以及提供自动同步文件功能。

       你可以从GooglePlay商店或者Amazon应用商店付费下载。如果你不愿意付费,也可以自己编译源代码或者下载预制的APK文件。

       对于iOS版应用不是开源的,只能成Apple应用商店获得us/app/owncloud/id?mt=8。

       我从githubclone一个最新的源代码,经过编译之后安装在我的Android上,下图为软件运行时截图。

       主要内容编译自:tutorials/build-your-own-cloud更多关于ownCloud开发和使用的信息,可以访问其官网:

如何创建.htaccess如何创建微信公众号

       å¦‚何创建一个没有文件名的文件。Windows中的htaccess

Windows本身不允许重命名时,前面没有字符。它认为这样的文件名是非法的。这使得我们无法通过将“newtextdocument.txt”重命名为“.”来创建这个访问控制文件。htaccess”。但是,凡事总有解决的办法。且看以下方法:

       1.使用DOS命令,在DOS下有三种方法可供选择:

       ä½¿ç”¨å±å¹•ç¼–辑命令copycon.htaccess,然后回车,输入内容,最后按ctrlz完成编辑,和。htaccess已成功生成;

       å°†å‘½ä»¤é‡å‘½åä¸ºren1.txt。htaccess,这是最常用的方法。不能在windowswindows中执行的命令和在cmd中一样好。

       ä½¿ç”¨é‡å®šå‘命令echo。>:.在这里,输入一个回车。htaccess,也可以创建成功;

       2.使用winrar的文件管理器新建一个文本文档,然后打开winrar主界面,定位文件,直接重命名即可。这是我解压国外开源项目时的灵感,还有它自己的。htaccess可以正确解压缩。当然可以用7zip之类的管理器。

       3.直接通过文本编辑工具保存,如记事本、ultraEdit等。,但在保存时,您可以只选择所有文件。这真的是欠揍的方式,但肯定不是我,是微软。

       4.使用php中的文件创建方法,fopen,file_put_contents文件名可以直接取为。htaccess。

       proftpd配置详解?

       proftpd全称:ProfessionalFTPdaemon是针对Wu-FTP的弱项而开发的,除了改进的安全性,还具备许多Wu-FTP没有的特点,能以Stand-alone、xinetd模式运行等。ProFTP已经成为继Wu-FTP之后最为流行的FTP服务器软件,越来越多的站点选用它构筑安全高效的FTP站点,ProFTP配置方便,并有MySQL和Quota模块可供选择,利用它们的完美结合可以实现非系统账号的管理和用户磁盘的限制。ProFTPD的特点:

       1.单配置文件,其设置指示和apache的有类似之处,非常容易配置。

       2.基于单个目录的.ftpaccess设置文件,类似与apache的.htaccess文件。

       3.易于设置的多虚拟服务器和匿名ftp服务。

       4.可以设置为从xinetd启动,或者是独立ftp服务器两种运行方式。

       5.匿名ftp的根目录不需要任何特殊的目录结构,或系统程序或其他系统文件。

       6.ncfptd不执行任何外部程序,从而减少了安全隐患。

       7.可以根据文件属主情况或unix风格的访问控制来隐藏文件或目录。

       8.以非root身份运行,从而减少了安全隐患。

       9.强大的log功能,支持utmp/wtmp及wu-ftpd格式的记录标准,并支持扩展功能的记录。

       .支持Shadow密码,包括支持密码过期机制。

       .遵从GPL版权,开放源代码。

       .可设定多个虚拟FTPserver,而匿名FTP服务更是十分容易。

       é”™è¯¯äº§ç”Ÿçš„原因?

       åŽŸå› ï¼š

       é€šå¸¸ï¼Œé”™è¯¯æ˜¯ç”±å®¢æˆ·ç«¯çš„访问错误配置引起的,这意味着您通常可以自己解决问题。

       è¿™äº›é”™è¯¯çš„常见原因是文件或文件夹权限设置,它控制谁可以读取、写入和执行文件或文件夹。

       åœ¨è¿™ç§æƒ…况下有两种可能性:网站所有者编辑了设置,使您无法访问资源,或者他们没有设置正确的权限。

       ç¬¬äºŒä¸ªå¸¸è§åŽŸå› æ˜¯.htaccess文件中的设置损坏或不正确。在您对文件进行更改后,可能会发生这种情况。您只需创建一个新的.htaccess文件即可轻松解决该问题。

       é™¤äº†è¿™ä¸¤ä¸ªå¸¸è§åŽŸå› ä¹‹å¤–,还有一些其他可能的错误触发因素:

       ç¼ºå°‘索引页_网站的主页名称不是index.html或index.php。

       é”™è¯¯çš„WordPress插件_如果WordPress插件配置不正确或与另一个插件不兼容,则可能会触发错误。

       é”™è¯¯çš„IP地址_域名指向错误的或旧的IP地址,该地址现在托管一个阻止您访问的网站。

       æ¶æ„è½¯ä»¶æ„ŸæŸ“-恶意软件感染可能会导致.htaccess文件不断损坏。在恢复文件之前,您需要删除恶意软件。

       æ–°ç½‘页链接-网站所有者可能已更新页面链接,现在与缓存版本不同。

       å®å¡”面板怎样设置页面?

       1、Apache服务器下设置错误页面

       ä¸ºApacheServer设置错误页面的方法很简单,首先制作一个名为.html/.htm/.php/.asp/.aspx的页面,视空间要求而定,再在.htaccess文件中加入如下内容即可(.htaccess文件一般linux空间会自带的,如果没有这个文件,自己可以用记事本写一个,命名为.htaccess,一定要记得去掉记事本文件的.txt哦。而windows虚拟空间是没有这个文件的,也不用上传这个文件):

       page

       ErrorDocument/notfound.php

       (“notfound”是你给你的自定义错误页面的命名,你也可以改成Error.php等等)

       æ³¨æ„ï¼š

       (1).切记不要将错误跳转到网站主页,比如使用了js脚本或者metarefresh跳转技术。否则可能会导致主页在搜索引擎中消失或者不被收录.

       (2).切记不要使用绝对URL如果使用绝对URL返回的状态码是“”+“”

       2、IIS/ASP.net下设置错误页面

       é™æ€é”™è¯¯é¡µé¢è®¾ç½®

       (1)做个页面,.html或者.htm,根据你的网站实际情况来。

       (2)服务器/虚拟主机管理设置,根据自己的情况,选择“使用根目录下的页面”,如果自己能找到“消息类型”选项,则要选择“文件”或者“默认值”,而不能选择“URL”。如果自己在主机提供商网站的管理后台找不到此“消息类型”选项请联系技术客服做出修改。这是具有决定性的一步。这步一定要操作好,如果在后台找不到这个消息类型,就不要自己设置,因为你设置之后肯定返回值是,所以事先和客服联系下。

       (3)上传.htm到网站根目录,打开一次试试,看是否成功了。

盘点那些渗透测试中的奇*技巧

       总结下渗透测试中的一些小技巧,仅做总结。

       0x php文件包含姿势

       这类姿势国外黑阔早有总结,比如包含上传的文件,当然文件可控。利用php封装协议php://input和data://,包含post数据造成php命令执行,当然allow_url_include选项需要打开。包含log文件也是可以,当我们提交恶意代码时也会被记录,于是包含记录了恶意代码的log文件是个好主意。包含/proc/self/environ文件:这需要PHP运行作为一个具有cgion/proc伪文件的系统且PHP脚本有权访问这些伪文件。包含会话文件需要攻击者能控制会话中的任何字符串值(注入代码,例如phpinfo(),会话文件必须存放在serializedsession文件且PHP脚本能够访问会话文件(通常是/tmp/ sess_SESSIONID文件)。包含其他由php应用创建的文件,只要你能想到的,都可以尝试创建然后包含他,比如数据库文件,缓存文件,应用程序级别的日志。

       0x .htaccess文件突破黑名单解析

       因为是黑名单,自定义.htaccess上传,内容为test.jpg文件,没有扩展名,内容是一句话,这个时候就成功绕过。

       0x php流封装绕过截断

       主要利用了PHP的一个流封装特性,可以参考PHP官方文档中的Example #3。假设存在文件包含的代码,但%无法截断,只能包含 xxxx.html.php。首先新建hello.html.php,内容为phpinfo();然后压缩成zip,结构如下图。然后访问网址,成功包含压缩文件内的hello.html.php。把我们输入的变量和include后面的变量合起来就是zip://test.zip#hello.html.php,代表当前目录下的test.zip压缩包里面的hello.html.php,于是包含成功。

       0x 通用防注入系统getshell

       相信许多朋友渗透测试都遇到过这种情况,系统做了数据提交记录,通过阅读类似程序的源码得知数据记录在sqlin.asp。于是想到直接提交一句话木马,但没有成功。提交and 1= ,通过菜刀连接sqlin.php即可。

       0x iis+php黑名单上传突破

       在php+window+iis环境下,双引号(“>”)等价于点号(“.”),大于符号(“>”)等价于问号(“?”),小于符号(“<“)等价于星号(“*”)。虽然有这么多好玩的东西,但这特性只能用于文件上传时覆盖已知的文件,于是这特性便略显鸡肋。但通过一系列的测试发现,P牛已经给出完美利用的方法。首先利用特殊办法生成一个php文件,然后再利用该特性将文件覆盖。可问题来了,怎样生成php文件呢?如果可以直接生成php文件的话,干嘛还要利用那什么特性?别急,办法总是有的。我们知道在文件上传时,我们往往会考虑到文件名截断,如%等。对!有的人可能还会用冒号(“:”)去截断,如:bypass.php:jpg。但你知道吗?冒号截断产生的文件是空白的,里面并不会有任何的内容。虽然生成的php文件里面没有内容,但是php文件总生成了吧,所以我们可以结合上面所说的特性完美成功利用。按照上面提供的思路,实现本地测试地址:/$1 [R=]

       å°† ... 这个 IP 替换成您要限制的 IP 即可。如果要实现多个 IP ,可以这样写:

       RewriteCond % ... [OR]

       RewriteCond % ... [NC]

       RewriteRule ^(.*)$ /$1 [R=] Rewrite主要的功能就是实现URL的重写。它的正则表达式是基于Perl语言,入站的规则用于修改 HTTP 请求 Url。这些规则可以为以下几个目的,如演示对用户更加友好的 URL 命名空间为您的 Web 站点,将请求的 Url 重定向到新位置,或阻止访问 Url 来提供服务。出站的重写规则修改 HTTP 响应。例如,如果您的 Web 站点的导航结构已更改,您可以创建修改您的内容中的 Url,以便将 Web 页的内容指向正确的位置出站规则。然后,您可以创建基于缓存的位置与新的 url 的客户端请求重定向的入站的规则。可基于服务器级的(/ 来学习,这里我们举一个简单的例子来说明它的用法。

       å‡è®¾æ‚¨è¦å®žçŽ°è¿™æ ·çš„ Rewrite 功能:您希望当用户访问 /about.htm (您的空间里可以并不需要存在 about.htm)的时候实际访问的是 /index.html 。

       è®¾ç½®æ–¹æ³•æ˜¯ï¼š

       1、创建一个文本文件,内容为

       [ISAPI_Rewrite]

       RewriteRule /about\.htm /index\.html

       è¿™é‡Œï¼ŒRewriteRule 这一行即为规则行,这一行由三部分组成,三部分由空格隔开,第一部分即 RewriteRule 这几个字,第二部分为用户访问的地址(使用正则表达式),第三部分为实际存在于服务器上的文件路径。

       2、将上述文件保存,命名为 和 www.name2.com ,我们实现让访问 www.name1.com 时看到的是网站根下的内容,而访问 www.name2.com 时看到的是 /name2/ 文件夹中的内容。

       é‚£ä¹ˆè®¾ç½®æ­¥éª¤å¦‚下:

       1、将您的网站捆绑域名 www.name1.com 和 www.name2.com ,这个非常重要,两个域名都要捆绑。这时候如果不做设置,两个域名访问的都是网站根下。

       2、修改上述问题一中的

       # 表示下一行规则只对 www.name2.com 生效(正则表达式中 \. 表示 . 本身)。

       RewriteRule ^(.*)$ /name2/$1 [I]

       # 表示将所有网页 Rewrite 到 name2 文件夹中,[I]表示忽略大小写。

       è¯·ç¡®è®¤ä¸Šè¿°å†…容位于 [ISAPI_Rewrite] 行之下,如果原本网站不存在 httpd.ini 文件,请将上述内容前面加上 [ISAPI_Rewrite] 。

       3、将修改后的 httpd.ini 上传到网站根下覆盖原文件。

       é€šè¿‡è¿™ä¸ªæ–¹æ³•ï¼Œæ‚¨å¯ä»¥å°†æ†ç»‘在网站上的任何一个域名采用任何特定的 Rewirte 规则,实现类似捆绑子目录的功能当然也是不在话下。这样,您的空间能捆绑多少个域名,您就可以建立多少个内容不同的网站了。 ngx_http_rewrite_module模块允许正则替换URI,返回页面重定向,和按条件选择配置。

       ngx_http_rewrite_module模块指令按以下顺序处理: 处理在server级别中定义的模块指令; 为请求查找location; 处理在选中的location中定义的模块指令。如果指令改变了URI,按新的URI查找location。这个循环至多重复次,之后nginx返回错误 (Internal Server Error)。 指令 语法:break;  默认值:—上下文:server,location,if  停止处理当前这一轮的ngx_http_rewrite_module指令集。

       ä¸¾ä¾‹ï¼š

       if ($slow) { limit_rate k; break;} 语法:if(condition) { ... }  默认值:—上下文:server,location  计算指定的condition的值。如果为真,执行定义在大括号中的rewrite模块指令,并将if指令中的配置指定给请求。if指令会从上一层配置中继承配置。

       æ¡ä»¶å¯ä»¥æ˜¯ä¸‹åˆ—任意一种: 变量名;如果变量值为空或者是以“0”开始的字符串,则条件为假; 使用“=”和“!=”运算符比较变量和字符串; 使用“~”(大小写敏感)和“~*”(大小写不敏感)运算符匹配变量和正则表达式。正则表达式可以包含匹配组,匹配结果后续可以使用变量$1..$9引用。如果正则表达式中包含字符“}”或者“;”,整个表达式应该被包含在单引号或双引号的引用中。 使用“-f”和“!-f”运算符检查文件是否存在; 使用“-d”和“!-d”运算符检查目录是否存在; 使用“-e”和“!-e”运算符检查文件、目录或符号链接是否存在; 使用“-x”和“!-x”运算符检查可执行文件; 举例:

       if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break;}if ($http_cookie ~* id=([^;]+)(?:;|$)) { set $id $1;}if ($request_method = POST) { return ;}if ($slow) { limit_rate k;}if ($invalid_referer) { return ;}

       å†…嵌变量$invalid_referer的值是通过valid_referers指令设置的。 语法:returncode[text];  returncodeURL;  returnURL;  默认值:—上下文:server,location,if  停止处理并返回指定code给客户端。返回非标准的状态码可以直接关闭连接而不返回响应头。

       ä»Ž0.8.版开始,可以在指令中指定重定向的URL(状态码为、、和),或者指定响应体文本(状态码为其它值)。响应体文本或重定向URL中可以包含变量。作为一种特殊情况,重定向URL可以简化为当前server的本地URI,那么完整的重定向URL将按照请求协议($scheme)、server_name_in_redirect指令和port_in_redirect指令的配置进行补全。

       å¦å¤–,状态码为的临时重定向使用的URL可以作为指令的唯一参数。该参数应该以“http://”、“https://”或者“https://”开始。URL中可以包含变量。

       0.7.版本以前只能返回下面状态码: 、、— 、、、、、 和 — 。

       ç›´åˆ°1.1.和1.0.版,状态码才被认为是一种重定向。 语法:rewriteregexreplacement[flag];  默认值:—上下文:server,location,if  如果指定的正则表达式能匹配URI,此URI将被replacement参数定义的字符串改写。rewrite指令按其在配置文件中出现的顺序执行。flag可以终止后续指令的执行。如果replacement的字符串以“http://”或“https://”开头,nginx将结束执行过程,并返回给客户端一个重定向。

       å¯é€‰çš„flag参数可以是其中之一: last 停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location; break 停止执行当前这一轮的ngx_http_rewrite_module指令集; redirect 在replacement字符串未以“http://”或“https://”开头时,使用返回状态码为的临时重定向; permanent 返回状态码为的永久重定向。 完整的重定向URL将按照请求协议($scheme)、server_name_in_redirect指令和port_in_redirect指令的配置进行补全。

       ä¸¾ä¾‹ï¼š

       server { ... rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; return ; ...}

       ä½†æ˜¯å½“上述指令写在“/download/”的location中时,应使用标志break代替last,否则nginx会重复轮循环,然后返回错误:

       location /download/ { rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break; return ;}

       å¦‚æžœreplacement字符串包括新的请求参数,以往的请求参数会添加到新参数后面。如果不希望这样,在replacement字符串末尾加一个问号“?”,就可以避免,比如:

       rewrite ^/users/(.*)$ /show?user=$1? last;

       å¦‚果正则表达式中包含字符“}”或者“;”,整个表达式应该被包含在单引号或双引号的引用中。 语法:rewrite_logon|off;  默认值:rewrite_log off;上下文:http,server,location,if  开启或者关闭将ngx_http_rewrite_module模块指令的处理日志以notice级别记录到错误日志中。 语法:setvariablevalue;  默认值:—上下文:server,location,if  为指定变量variable设置变量值value。value可以包含文本、变量或者它们的组合。 语法:uninitialized_variable_warnon|off;  默认值:uninitialized_variable_warn on;上下文:http,server,location,if  控制是否记录变量未初始化的警告到日志。

       å†…部实现

       ngx_http_rewrite_module模块的指令在解析配置阶段被编译成nginx内部指令。这些内部指令在处理请求时被解释执行。而解释器是一个简单的堆栈机器。

       æ¯”如,下面指令

       location /download/ { if ($forbidden) { return ; } if ($slow) { limit_rate k; } rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break;}

       å°†è¢«ç¿»è¯‘成下面这些指令:

       variable $forbiddencheck against zero return end of codevariable $slowcheck against zeromatch of regular expressioncopy /copy $1copy /mp3/copy $2copy .mp3end of regular expressionend of code

       è¯·æ³¨æ„æ²¡æœ‰å¯¹åº”上面的limit_rate指令的内部指令,因为这个指令与ngx_http_rewrite_module模块无关。nginx会为这个if块单独创建一个配置,包含limit_rate等于k。如果条件为真,nginx将把这个配置指派给请求。

       æŒ‡ä»¤

       rewrite ^/(download/.*)/media/(.*)\..*$ /$1/mp3/$2.mp3 break;

       å¯ä»¥é€šè¿‡å°†æ­£åˆ™è¡¨è¾¾å¼ä¸­çš„第一个斜线“/”放入圆括号,来实现节约一个内部指令:

       rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;

       å¯¹åº”的内部指令将会是这样:

       match of regular expressioncopy $1copy /mp3/copy $2copy .mp3end of regular expressionend of code