Ilj*_*lja 3 php mysql security sql-injection
不久前我已经开始进行Web开发了.我现在知道一些事情,但我真的很担心可能出现的安全问题.我知道像preg_replace这样的简单安全解决方案,但我对此并不自信.
因此,我想问你任何可以在以下情况下应用的"通用"安全标准.正如我所提到的,我不是专业人士,所以如果你能从一些简单但有用的东西开始,那将会很棒.如果可能,请提供示例吗?
我确实看过php手册,虽然我想知道人的其他信息.
以下是我在项目中使用的一些典型的MySQL/PHP内容.您能否提出任何改进措施以使其更安全?
$sql = mysql_query("SELECT * FROM stories WHERE showing = 1 ORDER BY cr_date DESC LIMIT 5") or die (mysql_error("There was an error in connection"));
while($row = mysql_fetch_assoc($sql)){
$story_id = $row["id"];
// etc...
}
Run Code Online (Sandbox Code Playgroud)
$username = $_POST['username'];
$sql = mysql_query("INSERT INTO myMembers (username, //etc... )
VALUES('$username' //etc.. ")or die (mysql_error());
Run Code Online (Sandbox Code Playgroud)
$username = $_GET['username'];
//gets username from url like http://myweb.com/profile.php?username=blabla
Run Code Online (Sandbox Code Playgroud)
首先,感谢您关心网络安全.许多PHP开发人员对此一无所知,也不在乎学习.他们是将我们的密码和银行账户暴露给黑客的人.成为解决方案的一部分!:-)
1.将mysql扩展视为不推荐使用.
请改用PDO或mysqli扩展.普通的mysql扩展不支持预准备语句和一些其他功能,例如事务控制.没有人应该是用mysql,如果有PDO_MYSQL或mysqli的提供给他们他们.
2.不要将外部数据插入SQL.
每当你从$ _GET或$ _POST的值,你应该考虑它是不安全的任何SQL语句中使用,或在你执行字符串作为某种类型的代码了shell_exec(),或其他实例.
3.使用准备好的查询参数而不是插值.
这真的很容易.事实上,使用查询参数比将变量插入SQL字符串更容易.您不必担心转义或长复杂的字符串连接.
请参阅此处的示例代码:http://us.php.net/manual/en/pdo.prepare.php
4.对于转角情况,请使用仔细过滤.
查询参数取代SQL表达式中的一个文字值.不是表名,不是列名,不是SQL关键字,不是值列表或完整表达式.对于这些,你需要使用字符串插值,但看到我的介绍SQL注入神话和谬误对于如何可以"白名单"的值进行插值的例子.
另请查看PHP 过滤器扩展,它提供了一种灵活的方法来验证输入或剥离无效字符,以确保只使用输入的有效部分.
查看示例,SELECT查询没有从外部源(如$ _GET)插入的动态值.这样一来就是安全的.
INSERT查询从请求中获取一个值,该值可能包含更改查询运行方式的恶意内容.这个是使用查询参数的一个很好的候选者.
还要考虑SQL注入是PHP最常见的两个安全问题之一.另一个是跨站点脚本(XSS).这与SQL没有直接关系,但您也应该了解它.
这是学习Web编程安全性的一个很好的资源: OWASP.org备忘单.
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |