首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP形式的代码注入

PHP形式的代码注入
EN

Stack Overflow用户
提问于 2012-02-18 21:30:36
回答 2查看 648关注 0票数 1

我有一个脚本,从用户收集信息,验证它,并将其向前插入到数据库中。

为了避免在每个表单域中出现任何讨厌的问题,我总是运行"htmlspecialchars“和"addslashes”。

今天我查看了我的错误日志,发现了以下错误:

代码语言:javascript
复制
Unknown: open(/tmp/sess_574af1197644f6c4019d664d71ea5f9e, O_RDWR) failed: Permission denied (13)

此错误是在处理表单的文件中生成的。显然,有人试图“黑”进我的应用程序。我正在为如何防止这种情况而苦苦挣扎。幸运的是,我的服务器访问级别是以正确的方式设置的,否则就会出现问题。

如何/需要对表单验证进行哪些更改才能在前端而不是在服务器访问级别捕获此类黑客攻击?

代码语言:javascript
复制
<?php
session_start();
include ($_SERVER['DOCUMENT_ROOT'].'/inc/config.inc.php');

if ($_POST[leverancier]) { $lid = CheckNumericGet($_POST[leverancier]); }

// Afhandelen van de submit
//
if ($_POST[a] == 'ervaring') {
$naam = CheckStringGet($_POST[naam]);
$ervaring = CheckStringGet($_POST[ervaring]);
$email = CheckStringGet($_POST[email]);
$twitter_naam = CheckStringGet($_POST[twitter_naam]);

// Als er een @ in twitternaam zit weghalen
//
if (substr($twitter_naam, 0,1) == '@') {
    $twitter_naam = substr($twitter_naam, 1);
}

include ($_SERVER['DOCUMENT_ROOT'].'/inc/functies_mail.inc.php');
$cont = "yes";

if ($naam == '' | $ervaring == '' |  $email == '' | $rating_foto == '' | $rating_service == '' | $besteld == 0) {
    $cont = "no";
    $msg[][1] = "Helaas, niet alle verplichte velden zijn ingevuld. Probeer het nogmaals.";
}

if (!CheckEmail($email)) {
    $cont = "no";
    $msg[][1] = "Het ingevulde email adres is niet correct";
}

#Als alle velden ingevuld zijn  
if ($cont == 'yes') {
    $server = gethostbyaddr($_SERVER['REMOTE_ADDR']);

    // Ervaring in database plaatsen
    //
    $query = "INSERT INTO 
". $tabel_ervaring ." (lid, naam, email, foto_score, service_score, ervaring, datum, foto, canvas, album, actief, twitter_naam, lev_akkoord)
        VALUES
            ($lid, '$naam', '$email', $rating_foto, $rating_service, '$ervaring', '$datum', '$foto', '$canvas', '$album', '0', '$twitter_naam', '$akkoord')";
    $result = mysql_query($query) or die(mysql_fout($query, $PHP_SELF));

    $ervaring_id = mysql_insert_id();

    $message = "";
    $subject = "Ervaring Fotovergelijk.nl: ";
    mail("xxx@xxx", "$subject", $message, htmlemailheaders($email));
}
$_SESSION[message] = $msg;

}

EN

回答 2

Stack Overflow用户

发布于 2012-02-18 21:53:34

看起来更像是PHP由于权限错误而无法打开会话文件(多个站点作为不同用户运行的共享主机+会话冲突)。看起来不像是黑客企图。

但是,您不应该在安全敏感上下文中使用addslashes (如manual page中所述)。确保使用预准备语句(使用PDO或mysqli...Zend不鼓励使用mysql扩展名,而是使用绑定参数。

票数 3
EN

Stack Overflow用户

发布于 2012-02-18 22:05:02

为了避免在我运行的每个表单域中出现任何严重的问题,我总是使用"htmlspecialchars“和"addslashes”。

这是最有趣的部分。听起来像是“我总是使用避孕套和安全带来避免严重的问题”。

如果像通用安全例程一样使用,"addslashes“和"htmlspecialchars”都不能做任何好的事情。两者都必须用于特定的目的。

很明显,有人试图“黑”进我的应用程序。

唯一可以说的就是你的服务器配置错误。然而,如果它不是永久性的问题,而是一个随机的问题,这个问题可能会更加复杂(并且需要更深入的调查)。

我需要对表单验证进行哪些更改

这是一个有点滑稽的问题。我们不知道您的表单验证,因此,我们显然不能告诉您要更改什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9341601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档