- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
不久前我开始从事网络开发。我现在知道了一些东西,但我真的很担心可能出现的安全问题。我知道像 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 扩展视为已弃用。
使用 PDO或 mysqli扩展名代替。普通的 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/
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
有时,当我看到一个我喜欢的网站或来自受人尊敬的人的网站时,我会查看源代码并尝试理解它们(就像我们所有人一样)。 关于 Jeremy Keiths他使用以下代码的网站: [role="navigatio
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
This question already has answers here: Prevent users from modifying part of the text in SLComposeVi
我正在使用 rockettheme 模板并使用自定义 css 文件编辑了一些 css 代码。 我已经设法让它在 Firefox 和 Chrome 上看起来像我想要的那样,但是 IE 看起来很奇怪。
我在 Dreamweaver 中右击我的行号,试图为一行添加书签。 我注意到这个菜单项: 什么是 Caio Hack? alert('hi'); 突出显示,结果如下: 最佳答案 这是一个古老的 CSS
我在看this SSL讲座。 Zeldovich 教授在这里说,如果连接是 http,黑客可能会让您相信您正在与 Amazon.com 对话,而实际上您正在与他的(黑客)服务器对话。 这是怎么发生的?
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我有一个相当复杂的 JTable 子类(WidgetTable 及其 WidgetTableModel),当我将它添加到虚拟 JPanel 以进行测试时它工作正常。 因为我绝对讨厌使用 LayoutM
我遇到了这个很酷的 Swift 技术的例子,但没有解释它是如何工作的或者它做了什么,尽管我已经写了相当多的 Swift 代码,但它充满了错综复杂的 Swiftisms,它目前正在扭曲我的转过头去。 如
服务器在互联网运转中为使用者提供计算或应用服务,企业的业务流程基本上都是在服务器上进行,大批量的数据信息都会存储在此,若是服务器在黑客的入侵下中毒,后果将不堪设想。想要避免黑客的入侵,我们可以从下面
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
我有一个 DropDownList,我正在尝试阻止它被用作攻击媒介。我是否可以假设用户无法实际更改 DDL 的值并回发到服务器?目前,如果我尝试在提交后更改数据包,则会抛出此 ASP.NET 错误消息
我有一堆 C++ 结构。我想将它保存到文件并再次加载它们。问题是我的一些结构是指向基类(/结构)的指针。所以我需要一种方法来找出类型并创建它。它们实际上只是 POD,它们都有公共(public)成员,
我正在使用 Sprite 作为输入按钮。它在 Firefox 和 > IE8 中运行良好。但是,在 IE7 和 8 中,ID 值显示在 png 图形上。它看起来像这样: (我会嵌入,但不允许):Pre
以下安全吗? struct K { ... } struct A { A(int psize) : size(psize), foo(nullptr), bar(nullptr) {
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我正在破解一个画廊插件,我想在其中禁用缩略图的点击事件并将其替换为悬停事件。 这就是我所做的:http://jsbin.com/enezol/3 $(function() { var galler
昨天这里有一篇帖子因问题过于本地化而被关闭。好吧,我现在遇到了同样的问题,而且这似乎是一个相当新的问题。 基本上,从昨天开始,我的防病毒软件就阻止了我的网站。该网站的 https://版本加载绝对正常
我有一个 Unity WebGL 应用程序在 Web 浏览器中运行,它使用普通的旧 Unity WWW 和 http://.... 与远程服务器通信,它调用服务器上的几个不同的 php 脚本并使用 P
我是一名优秀的程序员,十分优秀!