如果我不使用MySQL,我应该担心PHP注入吗?

时间:2010-01-20 09:22:14

标签: php

我使用一个简单的PHP脚本来运行在线漫画,它基本上使用GET取整数值 n 并为 n .jpg插入img标签。除了确保 n .jpg存在之外,它不会进行任何消毒或错误检查。与脚本的唯一用户交互是通过此GET进行的,另一个用字符串执行相同操作以手动显示不同的模板以进行测试。

我的问题是,我是否应该担心注射?如果是这样,我应该怎么做才能防止它呢?到目前为止我发现的所有东西只涉及MySQL注入,在这种情况下不适用。

8 个答案:

答案 0 :(得分:5)

如果您没有使用数据库,那么显然SQL注入不是您的问题。同样,如果您不存储任何用户提交的数据以显示给其他用户,则Cross-site-scripting不是问题。这会留下像eval()这样的东西或运行外部进程,攻击者可能会破坏这些进程,但听起来你也不会这样做。

所以你可能很安全。尽管如此,最好还是进行最少量的错误检查才能养成习惯。例如,您说您有一个整数GET参数。没有这样的东西 - 所有HTTP参数都是隐含的字符串。 PHP模糊了这种区别,但你肯定应该明确地将它强制转换为int,以确保它不是一些旨在利用XSS,SQL注入或eval漏洞的字符串(即使没有这样的漏洞)。

答案 1 :(得分:3)

你应该总是担心安全问题。并非每个安全漏洞都是由错误的mysql用法组成的: - )

答案 2 :(得分:2)

SQL注入不适用于您的情况,因为您没有为您的站点使用数据库。但您也应该考虑网站的其他安全问题,例如cross site scripting

如果您使用GET中的变量,请考虑以下网址:

 index.php?myvar=<script>alert(document.cookie);</script>

黑客能够以十六进制,utf等方式提供上述网址。

坏人可以修改你的GET变量来执行XSS攻击。 XSS是许多安全漏洞的根源。你也需要考虑这一点。

如果您期望GET var中的数字类型,请考虑以下代码:

$myvar = (int) $_GET['your_var'];

您应该使用htmlentities功能来阻止XSS攻击。

答案 3 :(得分:1)

如果get应该只包含整数使用

$n = intval($_GET['n'])

答案 4 :(得分:1)

如果你期望一个数字,不要消除不良输入,否认它。

if ( !ctype_digit($user_input) ) {
    header('Location: error.php'); // or whatever page
    exit;
}

答案 5 :(得分:0)

Allways检查用户输入以及$ _GET和$ _POST数据是否存在恶意内容。 Addslashes,ereg_match和intval是你的朋友......

如果你能逃脱它,请设置

allow_url_fopen = Off
php.ini中的

指令

答案 6 :(得分:0)

我也请求点击您想要的图片目录,因为您不希望人们使用example.com/?q=../../.htaccess等请求浏览您的文件服务器

我不确定这会对输出产生什么影响,但它不会很好。

答案 7 :(得分:0)

您不必担心SQL注入。但是您应该检查输入,因为它在您生成的html中使用。 想象一下,我将此链接http://www.example.com/viewComic.php?id="/><script type="text/javascript>alert("XSS");</script><img src="22提供给某人。这个人会有一些来自你网站的弹出窗口。使用javascript可以完成许多不好的事情。 有关更多信息,您可以开始阅读有关XSS的维基百科页面。

因此,您应该检查您期望的数字是否为数字。例如is_numeric