gpt4 book ai didi

php - 如何保护项目免受黑客攻击?

转载 作者:可可西里 更新时间:2023-11-01 07:49:08 24 4
gpt4 key购买 nike

不久前我开始从事网络开发。我现在知道了一些东西,但我真的很担心可能出现的安全问题。我知道像 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...
}

$username = $_POST['username'];
$sql = mysql_query("INSERT INTO myMembers (username, //etc... )
VALUES('$username' //etc.. ")or die (mysql_error());

$username = $_GET['username']; 
//gets username from url like http://myweb.com/profile.php?username=blabla

最佳答案

首先感谢您对网络安全的关心。很多PHP开发者对此一无所知,也懒得去学。他们是将我们的密码和银行账户暴露给黑客的人。成为解决方案的一部分! :-)

<强>1。将 mysql 扩展视为已弃用。

使用 PDOmysqli扩展名代替。普通的 mysql 扩展不支持准备好的语句和一些其他功能,例如事务控制。如果他们有可用的 PDO_mysql 或 mysqli,则没有人应该使用 mysql。

<强>2。不要将外部数据插入到 SQL 中。

任何时候您从 $_GET 或 $_POST 获取值时,您都应该认为在任何 SQL 语句、shell_exec() 或您将字符串作为某种代码执行的其他实例中使用它是不安全的。

<强>3。使用准备好的查询参数而不是插值。

这真的很容易。事实上,使用查询参数比将变量插入到 SQL 字符串中更容易。您无需担心转义或长而复杂的字符串连接。

请参阅此处的示例代码:http://us.php.net/manual/en/pdo.prepare.php

<强>4。对于极端情况,请谨慎过滤。

查询参数代替 SQL 表达式中的一个文字值。不是表名,不是列名,不是 SQL 关键字,不是值列表或完整表达式。对于那些,您确实需要使用字符串插值,但请参阅我的演示文稿 SQL Injection Myths and Fallacies有关如何将值“列入白名单”以进行插值的示例。

另请查看 PHP filter扩展,它提供了一种灵活的方式来验证输入或去除无效字符以确保仅使用输入的有效部分。


查看您的示例,SELECT 查询没有从 $_GET 等外部源插入的动态值。所以那个是安全的。

INSERT 查询从请求中获取一个值,该值可能包含改变查询运行方式的恶意内容。这是使用查询参数的一个很好的候选者。

还要考虑到 SQL 注入(inject)是 PHP 的两个最普遍的安全问题之一。另一种是跨站点脚本 (XSS)。这与 SQL 没有直接关系,但您也应该了解它。

这里是学习更多关于网络编程安全的好资源:OWASP.org cheat sheets .

关于php - 如何保护项目免受黑客攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8218491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com