2015-07-22 74 views
1

有没有什么方法可以让用户在PHP中改变代码的优势?假设他们有我的网页的完整源代码。PHP可变黑客

// make the connection 
$dbhost = 'localhost'; 
$dbuser = 'user'; 
$dbpass = 'password'; 
$db = "db"; 
$conn = new PDO("mysql:host=$dbhost;dbname=$db", $dbuser, $dbpass); 
// set errors 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// get the data 
$stmt = $conn->prepare("select username from usernames where " . $number . " = '$session'"); 
$stmt->execute(); 
$row = $stmt->fetch(); 
$username = $row[0]; 

if ($username == "superuser") { 
// code to view secure information and make changes to people accounts 
} 

有什么办法可以将他们的用户名更改为“超级用户”?

我计划能够快速浏览和编辑人的帐户详细信息的安全代码的一部分客户的服务选择,所以我不希望一些随机的用户能够查看和编辑其他用户的数据。

感谢

+5

'$ number'和'$ session'设置在哪里? – D4V1D

+0

请尝试在您的浏览器中使用例如按Ctrl-U。你看到PHP代码吗? –

+0

请参阅http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1。您可以接受SQL注入。 – chris85

回答

7

标识真的建议修复您的SQL,只是用PDO并不能保证安全,在SQL的身体任何使用PHP变量应避免

"select username from usernames where " . $number . " = '$session'" 

这是不安全的或者

"select username from usernames where " . $number . " = :session" 

如果$number成为username = 'superuser' --

,会发生什么
"select username from usernames where username='superuser' -- = :session" 

之后的任何内容--在sql中的评论很像在\\在php中。突然之间我是个超级用户。是的,它可以而且确实很容易发生。

这是正确的做法,

"select username from usernames where session_id = :session" 

不知道什么$number是,该点是在SQL身体没有PHP变量插值。我讨厌上轨道(不偷偷地爱上它),但正确使用PDO是必不可少的。我从网页上发布的'ASC''DESC'命令看到代码,并且没有将任何想法注入到PDO中,并且它不再像以前那样安全,因为他们认为它是安全的。

例如

"select username from usernames where username=1 order by $order" 

想想,如果顺序是这样

"Desc; Drop table usernames;" 

你可以与如果过滤数据就像发生了什么,然后例如

if(strtoupper($_POST['order']) == 'DESC'){ 
     $order = 'DESC'; 
}else{ 
     $order = 'ASC'; 
} 

但你必须当你在任何形式的sql中使用一个php变量时,要非常小心。这通常是最好的避免。你会注意到在上面的用户数据永远不会被放到sql中,它只在评估if条件时使用。

确定为手头的实际问题,我会完全分离的管理部分,单独的用户表,单独的会话数据,独立的一切。这里有几个原因,最重要的是你不必担心管理功能泄漏到一个普通的用户帐户。如果登录会话分开存储,则以管理员和用户身份登录会更容易。例如,您可以将管理链接登录为(用户),而无需知道其密码。您可以记录管理员操作而不会受到用户数据的污染。您可以拥有各种级别的管理员用户,同样不用担心普通用户可以访问此功能,因为他们是分开的。做正确的工作是一项重要的工作。

或可我legitly打造超级用户帐户,所以我可以从一个帐户来访问我的网站

这并不意味着来存储他们的信用卡号码,然后在他们偷看里面的数据,但它是你的网站(你可以自己决定),这是暗示的,当然有一些限制,比如有人来到你的房子,你不能抢夺他们或者在他们不知道的情况下出售他们的个人信息......他们有一定的安全期望,例如对于如何处理购买和账单信息的某种期望。但是,如果是出于支持或合法商业原因,那么只需要很好的客户支持来查看他们的工作情况(以登录类型的能力)。现在以他们身份登录并运行账单通常会被压低,但你明白了。

+1

php中的一个班轮实际上是'//''不是'''''''。 – Spooky

+0

@Spooky - 就这样。我在那篇文章中责怪阅读障碍, – ArtisticPhoenix

+0

感谢@ArtisiticPhoenix,所以如果我修正了mysql代码,他们应该没有办法让别人修改$ username。无论如何,你对整个客户支持事物的态度是什么,现在它只是我自己,所以我更加安全的去浏览服务器中的.sql,或者我可以合法地构建超级用户帐户我可以从我的网站内的帐户访问数据? –

0

在将数据传递给SQL语句之前,可以使用filter_values()。