2012-11-15 4 views
0

안녕하세요. 동료들에게 넘쳐 흐르고있는 문제가 있습니다. 문제는 해결하려고 시도하지만 그냥 기울이지 않고 도움이되기를 바랍니다.cURL을 사용하여 변수 내에서 상수 게시

나는 cURL을 통해 문자열을 웹 사이트로 보내는 스크립트가 있습니다. 그것은 예상대로 정확하게 작동하고 웹 페이지는 괜찮습니다. 내 문제는 웹 사이트에 몇 가지 정의가 있습니다 (예를 들어 아래의 예를 보려면 :). 이미 정의가 저장된 파일에 대한 참조를 추가했으며이 기능은 매력처럼 작동합니다.

define ('TABLE_COUNTER', 'counter');

의가 (모든 보안 따로 미신적 점보) I가 보내고있다 웹 사이트에서 내 스크립트는 간단한 가지고 있다고 가정 해 봅시다 :

는 mysql_query을 ($ _ POST [ 'AAA']);

여기서 $ _POST [ 'aaa']은 유효한 쿼리입니다. 문제의 웹 사이트에서 다음을 수행하면 결과는 다음과 같이 실행됩니다.

mysql_query ("SELECT * FROM". TABLE_COUNTER); 로 변환

:

는 mysql_query ("카운터 FROM SELECT *");

그러나 상수 정의와 함께 모든 sqlquery를 실행하려면 웹 사이트 끝에서 스크립트를 가져올 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다 (나는 머리카락을 많이 잃어 가고 있습니다!).

감사합니다.

+0

어떤 오류가 발생합니까? –

+0

표준 잘못된 쿼리 (실제로 보내지는 쿼리는 SELECT * FROM "입니다.) TABLE_COUNTER – ScottMcGready

+0

사용하려는 페이지에'TABLE_COUNTER'이 정의되어 있습니까? 통지를 포함하여 모든 오류를 표시하도록 오류보고가 설정되어 있습니까? –

답변

0

이 작업을 수행하는 방법은 eval 함께 :

$myquery_string = 'mysql_query('.$_POST['aaa'].');'; 
eval($myquery_string); 

그러나, 양식 입력이 거의 유효한 PHP 코드를 포함 할 수 있음을 의미 나는 정말이 일을하지 않는 것이 좋습니다, 그것은 실행됩니다 귀하의 스크립트에 의해. 이것은 일반적인 SQL 또는 XSS 주입보다 나쁩니다.

또한 양식을 채울 때 사용자는 쿼리의 리터럴 부분에 필요한 모든 인용 부호를 포함해야합니다.

더 나은 해결책은 입력에 템플릿 언어를 정의하고 PHP 스크립트가 템플릿 자리 표시자를 적절한 상수로 바꾸는 것입니다. 그러나 나는 이것을 당신을 위해 쓰지 않을 것입니다.

+0

Now 그거 꽤 멋지다. 나는 그것을 좋아한다.SQL 인젝션을 막기 위해 몇 가지 사항을 설명했지만 입력에 감사드립니다. – ScottMcGready

관련 문제