发布包含带有html内容的textarea的表单时,权限被拒绝

时间:2011-10-18 09:19:55

标签: php html forms phpmyadmin

好的,所以这是我的问题(我用Google搜索并没有帮助):

我有一个包含textarea元素的表单,在其中我想写一些类似的东西:

<table><tr><td>123</td></tr></table>

然后单击“提交”,我希望将其保存在数据库中。

现在,如果我输入nonHTML字符,我的代码就可以正常工作了,但如果我按上面的方式输入,我会得到:

Forbidden

You don't have permission to access /xxx/sample_posteddata.php on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

我的猜测是,不知何故,我的托管有一些安全措施,不允许这样做?

我试图从php管理界面插入确切的文本,并且工作正常:?

编辑:文件podaciEdit.php的完整源代码:

<?
            require_once("_dal/CredentialsManager.php");
            require_once("_dal/ProizvodRepository.php");
            $repos = new ProizvodRepository();

            if ( isset( $_POST["spremi"] ) ){
                $sifra = $_POST["sifra"];
                $naziv = $_POST["naziv"];                        
                $slika = $_POST["slika"];                   
                $podaci_full = htmlspecialchars($_POST["podaci_full"]);

                $podaci_min = $_POST["podaci_min"];
                $kategorija = $_POST["kategorija"];
                $kategorija_naziv = $_POST["kategorija_naziv"];

                if ($repos->updateProizvod ($sifra, $naziv, $slika, $podaci_full, $podaci_min, $kategorija, $kategorija_naziv))
                    echo "Podaci uspješno spremljeni!";
                else{
                    echo "Greška prilikom spremanja podataka!";                                             
                }

                echo '<br/>Kliknite <a href="proizvodiEdit.php">ovdje</a> za povratak.';
            }
            else if ( isset( $_GET["sifra"] ) ){
                $sifra = $_GET["sifra"];
                $proizvod = $repos->GetProizvod($sifra);

                if ($proizvod){                        
                    $sifra = $proizvod["sifra"];
                    $naziv = $proizvod["naziv"];                        
                    $slika = $proizvod["slika"];                        
                    $podaci_full = $proizvod["podaci_full"];

                    $podaci_min = $proizvod["podaci_min"];
                    $kategorija = $proizvod["kategorija"];
                    $kategorija_naziv = $proizvod["kategorija_naziv"];



                    //$data = htmlentities($podaci_full, ENT_QUOTES, "UTF-8");
                    echo <<<qq
                    <form id="proizvodEdit" method="POST" action="proizvodEdit.php">

                                            Podaci - tablica: (mozes resizeati po potrebi!)<br/>
                    <textarea class="podaci_full" id="podaci_full" name="podaci_full">{$podaci_full}</textarea>
                    <input type="submit" value="Spremi sve" name="spremi"/>
                    </form>

qq;
                }
                else
                    echo '<h2 class="title-page">Proizvod koji tražite ne postoji.</h2>';

            }
            else{
                echo '<h2 class="title-page">Proizvod koji tražite ne postoji.</h2>';
            }

4 个答案:

答案 0 :(得分:0)

如果您是网站的所有者,则可以使用htmlspecialchars(),然后将输出保存到数据库。如果您想要阅读它并转换为html,请使用htmlspecialchars_decode()

要获得更准确的答案,您应该发布用于将数据保存到数据库的代码。

答案 1 :(得分:0)

我猜你最初得了403。这是一个与文件权限相关的问题,一个apache错误消息,而不是一个php。尝试直接访问www.yourdomain.com//xxx/sample_posteddata.php,看看您是否可以访问该文件。甚至可以尝试GET参数。

www.yourdomain.com//xxx/sample_posteddata.php?sifra=xxx

您应该可以访问它。如果不是try

chmod +x /home/domain/public_html

404是NOT FOUND的错误代码。这意味着您的表单未正确指向您的php文件或其中一个包含失败。检查你的路径。

答案 2 :(得分:0)

由于您的HTML包含关键字“table”,我最好的选择是它可能是与mod_security或其他一些过滤SQL关键字的安全工具相关的问题,以帮助防止SQL注入。尝试将以下内容添加到.htaccess

SecFilterEngine Off

如果它以这种方式工作,它可能与mod_security有关。请注意,您可能无法从.htaccess文件中禁用它。

答案 3 :(得分:0)

实际上,帮助解决问题的是函数stripslashes

$podaci_full = stripslashes($_POST["podaci_full"]);