php - PHP - Praneeth Madush Advanced-PHP-Login-System 脚本安全吗?
问题描述
我在我的项目中使用了 Praneeth Madush Advanced-PHP-Login-System 脚本。此脚本基于用户类。这个类包含四个函数。此函数接缝不使用MySQL Prepared Statements。此脚本似乎存在安全风险。例如这是插入函数:
public function insert($data){
if(!empty($data) && is_array($data)){
$columns = '';
$values = '';
$i = 0;
if(!array_key_exists('created',$data)){
$data['created'] = date("Y-m-d H:i:s");
}
if(!array_key_exists('modified',$data)){
$data['modified'] = date("Y-m-d H:i:s");
}
foreach($data as $key=>$val){
$pre = ($i > 0)?', ':'';
$columns .= $pre.$key;
$values .= $pre."'".$val."'";
$i++;
}
$query = "INSERT INTO ".$this->userTbl." (".$columns.") VALUES (".$values.")";
$insert = $this->db->query($query);
return $insert?$this->db->insert_id:false;
}else{
return false;
}
}
我的问题是这个脚本安全吗?这个脚本有什么错误?能抵抗SQL注入攻击吗?
解决方案
是的,如果用户可以在 $data 中输入任何内容并且它没有被修改,那么它很容易受到 SQL 注入的攻击。例子:
//i guess 2 values :
$val[column1]="x',select password from mysql.user where user=’root’);--";
$val[column2]='doesntmatter';
//then:
$values="'x',select password from mysql.user where user=’root’);--,'doesntmatter'";
//then your query will be :
$query = "INSERT INTO ('column1','column2') `usertable` VALUES ('x',select password from mysql.user where user=’root’);--,'doesntmatter'
在这里,我只是用您的数据库的用户密码替换了 column2 值,我会在您网站的用户帐户上很好地打印出来。但这只是一件事,如果可以输入任何内容,则一切都可以出来。
对于错误,只需运行它,我们可能会帮助您解决错误。
推荐阅读
- vue.js - 无法使用 Vuejs 在 Storybook 中使用 axios-mock-adapter 模拟 axios api 调用
- coinbase-api - 为什么我从 Coinbase API 获得“交易”交易类型?
- bash - 将字符串隐藏到日期 bash
- java - 如何使 TreeStructureProvider 在 actionPerformed 方法上可更新?
- matlab - Matlab通过方法改变属性值
- cordova - Ionic App 在启动画面后显示白屏
- angular - Angular ngForm 没有显示价值
- django-rest-framework - /api/shopping-cart/ 处的 IntegrityError(1048,“列 'product_id' 不能为空”)
- google-apps-script - 谷歌表单端表单触发器未触发
- android - 将复选框按钮与视图中心对齐