自己刚学了PHP,尝试去看一些网上的代码,还好可以大概看懂,

身为一个网络安全爱好者,当然关心PHP开发所引发的安全问题,

作为新手应该首先注意的是用户的提交内容,他们很有可能是大灰阔哦!

看如下一个简单的登入表单

<html> 
 
<head> 
 
<title>Login</title> 
 
</head> 
 
<body> 
 
<form action=”verify.php” method=”post”> 
 
<p><label for='user'>Username</label> 
 
<input type='text' name='user' id='user'/> 
 
</p> 
 
<p><label for='pw'>Password</label> 
 
<input type='password' name='pw' id='pw'/> 
 
</p> 
 
<p><input type='submit' value='login'/></p> 
 
</form> 
 
</body> 
 
</html> 

下面是一个新手对表单的处理

<?php 
 
$okay = 0; 
 
$username = $_POST['user']; 
 
$pw = $_POST['pw']; 
 
$sql = “select count(*) as ctr from users where username='”.$username.”' and password='”. $pw.”' limit 1″; 
 
$result = mysql_query($sql); 
 
while ($data = mysql_fetch_object($result)){ 
 
if ($data->ctr == 1){ 
 

 
$okay = 1; 
 
} 
 
} 
 
if ($okay){ 
 
$_SESSION['loginokay'] = true; 
 
header(”index.php”); 
 
}else{ 
 
header(”login.php”); 
 
} 
 
?> 



这里没有对用户信息进行转义,任何的SQL注入都将成功。

应该利用mysql_real_escape_string()进行转义就可以了,但我不同意网上说用了就,可以过滤一切SQL注入,因为此函数不过滤%和_ 这里要请教大牛们了

接下来要讲一讲正则表达式用来限制GET变量

?php 
 
$pid = $_GET['pid']; 
 
if (strlen($pid)){ 
 
if (!ereg(”^[0-9]+$”,$pid) && strlen($pid) > 5){ 
 
//do something appropriate, like maybe logging them out or sending them back to home page 
 
} 
 
} else { 
 
//empty $pid, so send them back to the home page 
 
} 
 
//we create an object of a fictional class Page, which is now 
 
//even more protected from evil user input 
 
$obj = new Page; 
 
$content = $obj->fetchPage($pid); 
 
//and now we have a bunch of PHP that displays the page 
 
?> 

这下就不会,在数据库被塞入超大数值了,而且不会报错,一般小灰阔是想不到的。



欢迎网络安全爱好者与我交流。




相关文章:

  • 2021-09-17
  • 2022-12-23
  • 2021-12-26
  • 2022-12-23
  • 2021-10-08
  • 2021-12-04
猜你喜欢
  • 2021-06-19
  • 2021-05-27
  • 2022-12-23
  • 2021-12-26
  • 2022-12-23
  • 2021-09-28
  • 2022-02-09
相关资源
相似解决方案