转义用户名和网址文字框

时间:2017-08-20 20:21:56

标签: php html security

我的网站已经被黑了几次,我正在对平面文件发表评论。我过去曾试图逃避字符串,因为我没有使用SQL,所以我不能使用mysql_real_escape_string。但是,我已经尝试了许多其他方法来保持字符串免于这样的内容:<#$()[]{},.;!。我使用下面的代码:

$newData = nl2br(htmlspecialchars($_POST['ta'], ENT_QUOTES, 'UTF-8')); 

我也用这个:

$search = array("!", "$", "%", "(", ")");
$URLS = str_replace($search, " ", $url);  

最后,我用这个:

if (keychar == "`" || keychar =="#" || keychar =="^" || keychar =="*") {

他们似乎都没有工作,我的网站仍然被黑客入侵。我想知道是否有人有任何想法或能指出我正确的方向。

我相信textarea很好。我不是100%肯定,但我知道pix和username的URL文本框很容易受到攻击。我正在尝试学习如何关闭所有漏洞,因为你可以看到它无法正常工作。

<style>
div.container {
    width: 100%; 
    border: 1px solid gray;
}
header, footer {
    padding: 1em;
    color: white;
    background-color: black;
    clear: left;
    text-align: center;
}
nav {
    float: left;
    max-width: 160px;
    margin: 0;
    padding: 1em;
}
nav ul {
    list-style-type: none;
    padding: 0;
}  
nav ul a {
    text-decoration: none;
}
article {
    margin-left: 170px;
    border-left: 1px solid gray;
    padding: 1em;
    overflow: hidden;
}
fieldset {
	word-break: break-all;
	border:1px solid #999;
	border-radius:8px;
	box-shadow:0 0 10px #999;
	width:97%;  
}
legend {
	background:#fff;
}
table {
    word-break: break-all; 
    width:97%;
    border:0;
    cellspacing:0;
    cellpadding:0; 
}
div {   
   overflow:hidden;
   border: solid 2px gray;
   padding: 1em; 
}   
</style>
<!DOCTYPE html>
<html>
<body>
<?php 			
// $date = "".date("F d Y H:i:s.");  
$date = "".date("g:ia \n l jS F Y") . "\n";   
$myfile = "file.txt";
if(isset($_POST['ta'])){
    if(isset($_POST['urls'])){
        $url = $_POST['urls'];	 
    }
    $wordcount = str_word_count($_POST['ta']);
    $myfile ="file.txt";
    $newData = nl2br(htmlspecialchars($_POST['ta'], ENT_QUOTES, 'UTF-8'));
    $nn = nl2br(htmlspecialchars($_POST['namee'], ENT_QUOTES, 'UTF-8'));
    // $fieldsetstring = 
    // $fieldsetfilter = htmlspecialchars($fieldsetstring, ENT_QUOTES, 'UTF-8');
    $handle = fopen($myfile, 'a+');   
    // fwrite($handle,  '<fieldset><legend>Anonymous: ' . $date . '</legend>' . $newData . '</fieldset></br>');
    fwrite($handle, '<div><fieldset><legend><img src="'.$URLS.'"  width="42" height="42">' . $nn . ' : ' . $date . '</a></legend><table><tr><td><h1>' . $newData . '</h1></td></tr></table></fieldset></div></br>');
    fclose($handle);
}
?> 
<br/>
<br/>
<br/>   
<?php
if(file_exists("$myfile")){
   $myData = file_get_contents("$myfile");
}
?> 
<a></a>
<form action = "index.php" method = "POST"  style="align:center">
Username : <input type="text" name="namee" value="Anonymous" style="text-align:center" onkeypress="return check(event)"/>
url : <input type="text" name="urls" value="http://findicons.com/files/icons/398/halloween/128/jack.png" style="text-align:center; width:30%" onkeypress="return check(event)" onkeyup="return check(event)"/></br>
<textarea name="ta" cols="64" rows="10"></textarea>
<br /><br />
<input name="myBtn" type="submit" value="Submit"/>
</body>
</html>

在发布之前,我尝试过Stack Overflow的许多转义。事实上,我已经试图解决这个问题已经持续了一个月,而且我确信它已被攻击了几次。这就是我所知道的。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

您可以尝试此功能:

function protect($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

更新:代码说明

该函数只接受一个变量或一个参数,并通过PHP的trimstripslasheshtmlspecialchars函数传递它。返回的变量对于可能的注射是安全的。