2017年2月

在Apache下bW博客强制访问HTTPS

HTTPS已经是大势所趋了,而国内的网络环境更需要尽早的使用HTTPS,因为运营商太流氓,像DNS劫持什么的都是家常便饭了,如果运营商的DNS劫持系统被黑,黑客利用这个系统给网站加上点什么恶意代码,那损失就更大了。下面就说下在bW下,怎样强制访问https。
如果已经开启了伪静态(使用官方的规则),那么请使用下面的.htaccess文件内容:

RewriteEngine on
RewriteBase /

# RewriteCond %{REQUEST_FILENAME} -f [OR]
# RewriteCond %{REQUEST_FILENAME} -d
# RewriteRule ^.*$ - [L]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

RewriteRule ^index/([0-9]+)/?$ index.php/$1/ [QSA,L]
RewriteRule ^category/([^/]+)/([0-9]+)/?$ category.php/$1/$2/ [QSA,L]
RewriteRule ^category/([^/]+)/?$ category.php/$1/ [QSA,L]
RewriteRule ^post/([^/]+)/?$ read.php/$1/ [QSA,L]
RewriteRule ^tag/([^/]+)/([0-9]+)/?$ tag.php/$1/$2/ [QSA,L]
RewriteRule ^tag/([^/]+)/?$ tag.php/$1/ [QSA,L]
RewriteRule ^page/([^/]+)/?$ page.php/$1/ [QSA,L]

如果未开启伪静态,请使用下面的内容:

RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

以上。

C# 实现的Javascript加密算法

不打算公开的,不过转念一想,反正又没人看,就发出来吧。
这是使用C#来实现的JS加密的,被加密的JS文件,代码需要写的规范,不能少了分号(;)等js中可能会被忽略的符号。
下面是完整代码,自己看吧

    public class JavascriptEncoder
    {
        public static string ENCODE_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_$";
        public bool isDebug = false;

        public string JsEncode(string filename, int offset)
        {
            string js = WebTools.FileObj.ReadFile(HttpContext.Current.Request.MapPath(string.Format("/tmp/{0}", filename)));
            int length = js.Length;

            js = RemoveAnnotation(js);

            WebTools.FileObj.WriteFile(System.Web.HttpContext.Current.Request.MapPath("tmp.js"), js);

            StringBuilder sb = new StringBuilder(js);
           
            sb.Replace(@"\r", " "); //\n替换为空格
            sb.Replace(@"\n", " "); //\n替换为空格
            sb.Replace(Environment.NewLine, " ");
            sb.Replace((char)13, (char)32);
            sb.Replace((char)10, (char)32);
            sb.Replace(@"\", @"\\");    //\替换为\\
            sb.Replace(@"'", @"\'");    // '替换为\'
            js = sb.ToString();
            Regex regex = new Regex(@"([\w\$]+)");            
            MatchCollection matches = regex.Matches(js);
            string element = "";
            List<string> dict = new List<string>();
            int index = 0;
            StringBuilder encscript = new StringBuilder(js);
            StringBuilder dicttab = new StringBuilder();

            foreach (Match match in matches)
            {
                element = match.Groups[1].Value;
                index = dict.FindIndex(m => m.Equals(element));
                if ( index < 0)
                {
                    dict.Add(element);
                    index = dict.Count - 1;
                }
                encscript.Replace(element, Base64Encode(offset + index + 1));
                //regex.Replace(js,element, Base64Encode(offset + index + 1));
            }

            foreach(string d in dict)
            {
                dicttab.AppendFormat("{0}|", d);
            }

            string dictstr = dicttab.ToString().TrimEnd('|');   //字典字符串,删除最后一个|

            string res = formatCode(encscript.ToString(), dictstr, dict.Count, offset);

            return res;
        }

        /// <summary>
        /// 仿Base64
        /// </summary>
        /// <param name="c"></param>
        /// <returns></returns>
        private string Base64Encode(int c)
        { 
            string res="";
            if (c < 0) throw new Exception("Error:Offset必须>=0.");
            if (c > 63)
                res = Base64Encode(c >> 6) + Base64Encode(c & 63);
            else {
                //为了配合appendReplacement方法的使用,将$替换为\$
                res = c.Equals(63) ? @"\$" : ENCODE_BASE64[c].ToString();
            }
            return res;
        }

        private string formatCode(string enc, string dict, int size, int offset)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("/* Power by Shoresoft.Cn */\neval(function(E,I,A,D,J,K,L,H){function C(A){return A<62?String.fromCharCode(A+=A<26?65:A<52?71:-4):A<63?'_':A<64?'$':C(A>>6)+C(A&63)}while(A>0)K[C(D--)]=I[--A];function N(A){return K[A]==L[A]?A:K[A]}if(''.replace(/^/,String)){var M=E.match(J),B=M[0],F=E.split(J),G=0;if(E.indexOf(F[0]))F=[''].concat(F);do{H[A++]=F[G++];H[A++]=N(B)}while(B=M[G]);H[A++]=F[G]||'';return H.join('')}return E.replace(J,N)}(");
            sb.Append("'" + enc + "',");
            sb.Append("'" + dict + "'.split('|'),");
            sb.Append(size + "," + (size + offset) + ",/[\\w\\$]+/g, {}, {}, []))");
            return sb.ToString();
        }

        /// <summary>
        /// 移除块注释
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private string RemoveAnnotation(string str)
        {
            string result = str;
            int start = 0;
            int end = 0;
            start = str.IndexOf("/*");
            end = str.IndexOf("*/");
            StringBuilder sb = new StringBuilder(str);
            if (start >= 0 && end>start)
            {
                sb.Remove(start, end - start + 2);
                return RemoveAnnotation(sb.ToString());
            }
            else
                return sb.ToString();
        }
    }

分类

最新文章

最近回复

  • 老徐: 已经加上了,抱歉才看到
  • 青山: 某种原因,暂停友链,抱歉。
  • 搬瓦工: 朋友 交换链接吗
  • 飞刀说: 名称:飞刀说 描述:...
  • 青山: 计划搬迁到腾讯云,正...
  • 河边的飞刀: 网站名称:飞刀说 网...
  • 老徐: 具体要哪个呢?
  • 老徐: 是不是有点老?
  • 青山: 哇,林志炫
  • 老白: 哇,这改的可以,能不...

归档

标签云

C# .net core asp.net 情感 SQL mongodb sql server EasyUI 安全 激活 linux 身份验证 https typecho .net sql注入 kms MVC IIS 高并发 IE 坑爹 服务器 mysql Oracle Combobox Datagrid 口语 数据抓取

其它